要求:将一个非负整数,分别将它每一位相加,直到结果只有一位数。
例如:38->3+8=11->1+1=2 输出应当为2
最常见的解法:too naive
public static int addDigits(int num) {
if (num / 10 == 0)
return num;
while (num / 10 != 0)
num = num / 10 + num % 10;
return num;
}
还有一种解法,因为输出必定是0到9中的一个数,我们来找规律
可以得到关系式:
这样一行代码就搞定了,也就达到了时间复杂度为O(1)