1.Add Digits
来源:互联网 发布:log4j.xml配置打印sql 编辑:程序博客网 时间:2024/05/17 07:36
此为在leetcode做的第一道题目,原题目如下:
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 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
翻译为中文之后题目的意思就是,输入为一个正整数,然后经过让其各个数位上的数字相加,然后再让这个结果的各个位上数字相加直到相加的结果是个位数。并要求时间复杂度为O(1),不用递归或循环。
我编写的代码如下,提交之后通过。
public int addDigits(int num) { int a=0; int sum=0; while(num!=0){ a= num%10; num=num/10; sum=sum+a; if(sum>=10){ sum=1+sum%10; } } return sum; }
分析思路:
一开始拿到题目并且要求是线性复杂度并且不让用递归,确实有点害怕,但是仔细分析之后发现题目并不是很难。
以输入正整数123456789为例,不难发现从1加到6与从6加到1对结果并没有什么影响,所以为实现代码方便我是从低位开始加。在数字加的过程发现,对后两位9+8=17来说,它们对最后结果的影响是1+7=8,所以9+8之后可以直接处理成8而不是17,在下一位相加的时候直接用之前的结果8加7计算即可,然后重复上一步,知道加到最高位1。
方法二:
根据题目中描述可知输出的结果只能是0--9中的一个
使用方法I的代码循环输出0 - 19的运行结果:
可以发现输出与输入的关系为:
这个结果与直接对num取模的唯一差别在只有当num是9的倍数的时候变成了9而不是0,所以先让num-1对9取模之后再加1即可。
- 1.Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- 文章标题
- JAVA中如何对double或者float的浮点数进行精度计算
- 程序员到底怎么了 如何成为一个合格的程序员
- Android开发最佳实践
- gdb多线程调试
- 1.Add Digits
- php获取post参数的几种方式
- substring方法的使用
- 【干货】国外程序员整理的 C++ 资源大全
- 基于echarts实现图表展示
- 解决 recv() failed (104: Connection reset by peer) while reading response header from upstream
- CodeForces#325 B. Laurenty and Shop
- 总结Cocos2d-x 3.x版本的一些变化
- MapReduce中碰到数据覆盖现象,org.apache.hadoop.io.Text.getBytes 问题