LeetCode P258 Add Digits 题解
1.题目:
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?
题意:
输入一个数字,将这个数字所有位数相加一直到得到一个小于10的数,返回这个数
希望复杂度为O(1)
2.解题思路:
一般最开始都会想用个循环就出来了,然复杂度要求O(1),即没有循环。
看到这样的复杂度发觉肯定是有规律可以推出公式的,尝试。
11 :2,比原来减少了9
22 :4,比原来减少了18
可以这样想 一个两位数变成个位加十位 减少十位上的数字(10-1)
……
反之可以推,知道这个数ans,原来的数n=9k+ans;得到公式
3.代码
1 |
|
4.一些总结:
第一次提交Wrong了。。。忘记考虑k*9%9=0,然答案应该是9