leetcode-Add Digits
2016-04-06 09:19
260 查看
题目:给定一个非负整数num, 重复将其各个位数上的数字进行求和操作,直到结果为1-9的数(个位数)为止。
比如: 给出num = 38 , 计算过程如下: 3 + 8 = 11 , 1 + 1 = 2, 因为2 为个位数, 返回。
要求:在 不用循环或递归的情况下,时间复杂度为O(1) ?
一开始,没什么思路,就手动计算几个数看看。
输入:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20......
输出: 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2.......
可以看出,输出结果为9个一循环,所以自然而然想到 以9为底,取余。但这样,9,18,这种9的倍数就为0了,所以要单独加个条件判断。
代码如下:
这样觉得有点麻烦,看看有没有更高效简短的代码,通过查询讨论区中各大神的方法,看到一种很棒的解法。
通过减1,加1的方式很好的避免了数为9的倍数时,取余为0的尴尬。
比如: 给出num = 38 , 计算过程如下: 3 + 8 = 11 , 1 + 1 = 2, 因为2 为个位数, 返回。
要求:在 不用循环或递归的情况下,时间复杂度为O(1) ?
一开始,没什么思路,就手动计算几个数看看。
输入:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20......
输出: 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2.......
可以看出,输出结果为9个一循环,所以自然而然想到 以9为底,取余。但这样,9,18,这种9的倍数就为0了,所以要单独加个条件判断。
代码如下:
public class Solution { public int addDigits(int num) { if (num < 0 ) return -1; if (num % 9 == 0 ) return 9 ; return num % 9; } }
这样觉得有点麻烦,看看有没有更高效简短的代码,通过查询讨论区中各大神的方法,看到一种很棒的解法。
public class Solution { public int addDigits(int num) { if (num < 0 ) return -1; return 1 + (num - 1)%9; } }
通过减1,加1的方式很好的避免了数为9的倍数时,取余为0的尴尬。
相关文章推荐
- Django中载入js和css文件
- LINUX测试环境部署nginx(五)
- 使用gson-1.6.jar解析json
- jQuery实现HTML表格单元格的合并功能
- [caffe]深度学习之图像分类模型googlenet[inception v1]解读
- bzoj 2132: 圈地计划
- JavaSe基础(24)-- 集合
- (转)LINUX测试环境部署Redis(四)
- java工程中使用freemarker例子
- Dynamics AX 2012 R2 AIF 内部异常
- 10款最优秀的开源移动开发工具
- NPM 与 left-pad 事件:我们是不是早已忘记该如何好好地编程?
- SSL常用专业缩略语汇总
- Linux下MongoDB安装和启动配置(转载)
- 第一天 虽然很简单 但是很高兴
- Please ensure that adb is correctly located at ‘F:\Android\adt-bund异常的解决之道
- springMVC4(13)视图解析器分类详解
- hexo干货系列:(六)hexo提交搜索引擎(百度+谷歌)
- 互娱3.31一面
- 支持FreeMarker需要哪些JAR包?