LeetCode258-各位相加(猜想公式)
1、正常的情况就是循环,把每一位加起来。
2、O1时间,还真是想不到。
看了一下答案
public int addDigits(int num) { if (num == 0) return 0; return (num-1)%9+1; }
所以说O1,就意味着一个公式。
这个公式,只能靠从输入输出中,找规律猜出来,推倒是很难的。
要求是加到只有各位,那就是只有1~9这几个数字。 0 是不可能的,没有一个数各位相加为0,除了0
那么要做的就是给num 和 1~9 做一个映射,这个映射关系就是公式!
9个数,其实一般结果都是会循环的,不然也不会有规律。
1~9 就是它本身
10 ~ 19 这里的数字%9 都是对的 10% 9 =1 11 %9 =2
但是 18 % 9 =0 了 1+8 应该是9
19%9 =1 但是1+9=10 1+0 = 0
17%9 = 8 18要得到9 就要是(18-1)%9+1.
这样用在19上面 就是 (19-1)%9 + 1 = 1
也对
所以猜想公式 就是 (num-1)%9+1
就是这么没有道理