文档章节

数值的每位数相加最终返回各位数 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
博文 561
码字总数 333804
作品 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
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
ZOJ Problem Set - 1828 Fibonacci Numbers(大数相加)

Fibonacci Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB A Fibonacci sequence is calculated by adding the previous two members of the sequence, with the first two members ......

hushhw
2017/11/30
0
0
LeetCode:Add Two Numbers - 两个链表逐项做带进位的加法生成新链表

1、题目名称 Add Two Numbers (两个链表逐项做带进位的加法生成新链表) 2、题目地址 https://leetcode.com/problems/add-two-numbers/ 3、题目内容 英文:You are given two linked lists ...

北风其凉
2015/08/27
290
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
24分钟前
1
0
invalid character found in the request target 异常

这个异常时因为Tomcat 9不支持请求格式出现“{”等非法字符的问题 因为tomcat版本问题遇到的坑,记录一下。 问题 今天由于要测试一下订单详情页的异步查询,在本地起了一个服务,发送的请求是...

edwardGe
28分钟前
1
0
发现抓包软件fiddler的bug

1个请求他跳转之后,直接400,被拦在了Apache,使用fiddler 的,replay requests 是同样的结果,但是replay composer确是正常的。 也就是说这replay requests 是发原来的包,replay composer...

NLGBZJ
38分钟前
1
0
linux screen 命令详解

shell关闭后, 主机仍然运行 screen命令 启动jenkins以后, screen, 然后按ctrl+a 再按d 这样暂停了子界面, 这时候回到了父界面 用screen –ls查看目前子界面的状态 [root@free /]# screen -l...

SuShine
39分钟前
1
0
mac机器切换无线网络导致网页不能打开的问题

问题: 公司和家里使用不同的WI-FI,每次从家到公司时自动切换网络后,公司的许多地址不能访问, ping域名是可以ping同的,但是网页却打不开... 问题分析: 初步猜想是DNS缓存的问题? 对于MAC系统没...

Lennie002
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部