文档章节

数值的每位数相加最终返回各位数 Add Digits

叶枫啦啦
 叶枫啦啦
发布于 2017/06/26 17:13
字数 361
阅读 6
收藏 0

题目:

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

解决:

① 将每位数相加,直到它们的和为个位数为止。耗时3ms。

public class Solution {
    public int addDigits(int num) {
        while(num > 9){
            int sum = 0;
            while(num > 0){
                sum += (num % 10);
                num /= 10;
            }
            num = sum;
        }
        return num;
    }
}

②我们先来观察1到20的所有的树根:

1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8    
9    9    
10    1
11    2
12    3    
13    4
14    5
15    6
16    7
17    8
18    9
19    1
20    2

根据上面的列举,我们可以得出规律,每9个一循环,所有大于9的数的树根都是对9取余,那么对于等于9的数对9取余就是0了,为了得到其本身,而且同样也要对大于9的数适用,我们就用(n-1)%9+1这个表达式来包括所有的情况,所以解法如下,耗时2ms:

public class Solution {
    public int addDigits(int num) {
        if (num <= 9) {
            return num;
        }
        return (num -1) % 9 + 1;
    }
}

③ 同一个思路

public class Solution {
    public int addDigits(int num) {
        return num % 9 == 0 ? (num == 0 ? 0 : 9) : num % 9;
    }
}

© 著作权归作者所有

共有 人打赏支持
叶枫啦啦
粉丝 10
博文 565
码字总数 340658
作品 0
海淀
【leetcode】刷题(python & java)解析:【两数相加】 重点【链表】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meiqi0538/article/details/82945167 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个...

皮乾东
10/05
0
0
0001 + 1 = 0002,01 + 1 = 02

package com.test.test; / @ClassName: IntDigitPadded @Description: 数字位数补齐,如果此数小于定义总位数,则前面补零 @author PineTree @date 2014年12月19日 下午3:57:38 @version / ...

spml
2014/12/19
0
0
357. Count Numbers with Unique Digits

问题 给定一个非负整数n,数一下在0<=x<10^n之间有多少个数是unique digit(每个位数都不相同) Input: 2 Output: 91 Explanation: 0-99有100个数,去除9个位数相同的值{11,22,33,44,55,66,...

PilgrimHui
10/10
0
0
LeetCode:Add Digits - 非负整数各位相加

1、题目名称 Add Digits (非负整数各位相加) 2、题目地址 https://leetcode.com/problems/add-digits 3、题目内容 英文:Given a non-negative integer num, repeatedly add all its digi......

北风其凉
2015/08/26
0
2
[CareerCup] 18.1 Add Two Numbers 两数相加

18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. 这道题让我们实现两数相加,但是不能用加号或者其他什么数学运算符号,那么我们只能回归...

机器的心脏
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 到底谁是小公猫……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Trivium的单曲《Throes Of Perdition》 《Throes Of Perdition》- Trivium 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁:...

小小编辑
56分钟前
113
3
基础选择器

注意:本教程参考自网上流传的李兴华老师的jquery开发框架视频,但是苦于没有相应的配套笔记,由我本人做了相应的整理. 本次学习的内容 学习jquery提供的各种选择器的使用,掌握了jquery选择...

江戸川
今天
1
0
Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
今天
2
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部