[LeetCode258] Add Digits
来源:互联网 发布:sql重庆培训 编辑:程序博客网 时间:2024/05/21 22:51
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?
Hint:
- A naive implementation of the above process is trivial. Could you come up with other methods?
- What are all the possible results?
- How do they occur, periodically or randomly?
- You may find this Wikipedia article useful.
解法一:
class Solution {public:int addDigits(int num) {while (num / 10 > 0){int sum = 0;while (num > 0){sum += num % 10;num /= 10;}num = sum;}return num;}};
但是这个解法在出题人看来又trivial又naive,需要想点高逼格的解法,一行搞定碉堡了,那么我们先来观察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这个表达式来包括所有的情况,所以解法如下:
class Solution{public:int addDigits(int num){return (num - 1) % 9 + 1;}};
0 0
- LeetCode258:Add Digits
- leetcode258 Add Digits
- leetcode258 Add Digits
- leetcode258: Add Digits
- [LeetCode258] Add Digits
- LeetCode258 Add Digits
- leetcode258 Add Digits java
- python--leetcode258. Add Digits
- LeetCode258——Add Digits
- leetcode258-Add Digits(非负整数各位相加)
- LeetCode258
- leetcode258
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- Add Digits
- 洛谷P14341 滑雪
- 安卓开发——根据QQ号跳转到QQ聊天界面
- 分数化小数decimal
- PHP开发者常犯的10个MySQL错误
- linux 学习之 进程
- [LeetCode258] Add Digits
- c# 获取exe程序的句柄, 并根据句柄置顶它
- 【大杂烩】杂7杂8的东西
- IOS学习之UIWebView
- 堆和栈
- BZOJ 1690 【USACO 2007 Dec奶牛观光】
- uva 1583
- Java学习提要——基本网络编程Socket与echo
- Android图片加载框架——Fresco