[LeetCode]Add Digits
2015-11-20 11:45
337 查看
题目描述:(链接)
Given a non-negative integer
For example:
Given
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
解题思路:
转载地址: http://my.oschina.net/Tsybius2014/blog/497645
假设输入的数字是一个5位数字num,则num的各位分别为a、b、c、d、e。
有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e
即:num = (a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9)
因为 a * 9999 + b * 999 + c * 99 + d * 9 一定可以被9整除,因此num模除9的结果与 a + b + c + d + e 模除9的结果是一样的。
对数字 a + b + c + d + e 反复执行同类操作,最后的结果就是一个 1-9 的数字加上一串数字,最左边的数字是 1-9 之间的,右侧的数字永远都是可以被9整除的。
这道题最后的目标,就是不断将各位相加,相加到最后,当结果小于10时返回。因为最后结果在1-9之间,得到9之后将不会再对各位进行相加,因此不会出现结果为0的情况。因为 (x + y) % z = (x % z + y % z) % z,又因为 x % z % z = x % z,因此结果为 (num - 1) % 9 + 1,只模除9一次,并将模除后的结果加一返回。
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
2has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
解题思路:
class Solution { public: int addDigits(int num) { string cache = to_string(num); int result = 0; while (true) { for (auto ix = cache.begin(); ix != cache.end(); ++ix) { result += (*ix - '0'); } if (result <= 9) { break; } cache = to_string(result); result = 0; } return result; } };
转载地址: http://my.oschina.net/Tsybius2014/blog/497645
假设输入的数字是一个5位数字num,则num的各位分别为a、b、c、d、e。
有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e
即:num = (a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9)
因为 a * 9999 + b * 999 + c * 99 + d * 9 一定可以被9整除,因此num模除9的结果与 a + b + c + d + e 模除9的结果是一样的。
对数字 a + b + c + d + e 反复执行同类操作,最后的结果就是一个 1-9 的数字加上一串数字,最左边的数字是 1-9 之间的,右侧的数字永远都是可以被9整除的。
这道题最后的目标,就是不断将各位相加,相加到最后,当结果小于10时返回。因为最后结果在1-9之间,得到9之后将不会再对各位进行相加,因此不会出现结果为0的情况。因为 (x + y) % z = (x % z + y % z) % z,又因为 x % z % z = x % z,因此结果为 (num - 1) % 9 + 1,只模除9一次,并将模除后的结果加一返回。
class Solution { public: int addDigits(int num) { return (num - 1) % 9 + 1; } };
相关文章推荐
- IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance
- Load Generator负载生成器
- maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项
- 华为OJ基础篇-整形数组合并
- JSP的一些记录
- 内存碎片和memcached slab控制碎片方法
- #VSTS日志# 15/11/18 插件应用市场,RM,包管理器等
- 判断iPhone和iPad 判断设备版本
- Instagram分享
- USB开发基础--实例讲解USB的枚举(配置)过程
- 安卓新闻客户端(五) ListView下拉刷新 XlistView解析
- Protobuf语言指南
- HTTP Status 405 - Request method 'POST' not supported (Spring MVC)
- HTML5中canvas线性渐变的用法
- iOS 利用AFnetworking判断网络状态
- 错误记录
- iOS在Cocoa Touch Static Library使用CocoaPods
- Android编程实现应用强制安装到手机内存的方法
- 我的第一篇博客
- Quartz2D使用(一)