题目地址:
https://www.lintcode.com/problem/add-digits/description
给定一个非负整数,对其进行每位相加的操作,直到加成一位数为止。求最后加出来的结果。
给定一个数 ,则 ,所以只需对 模 取余即可。但需要注意,如果 ,但模出来是 ,则意味着最终加出来是 ,并不是 。这一点可以用数学归纳法来证明。对于 ,容易证明对其操作一次得数不是 ,假设操作 次得数仍然不是 ,当操作 次时,由于已知操作 次不是 ,所以操作 次后的得数一定有某一位不是 ,所以当然再操作一次得数仍然不是 。所以我们只需要算 即可。对于 的情况代进去验证也是对的(至少对于java语言是对的)。代码如下:
public class Solution {
/**
* @param num: a non-negative integer
* @return: one digit
*/
public int addDigits(int num) {
// write your code here
return (num - 1) % 9 + 1;
}
}
时空复杂度 。