LeetCode 258. Add Digits
LeetCode 258. Add Digits (各位相加)
题目
链接
https://leetcode-cn.com/problems/add-digits/
问题描述
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例
输入: num = 38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
提示
0 <= num <= 231 - 1
思路
考虑到节省运算次数,找规律。
假设原数为 100a+10b+c,这三位数相加之后的值为a+b+c,二者的差值为99a+9b,恰好可以被9整除,所以我们可以直接计算a+b%9.
但是我们还需要考虑到一件事,如果数字为18这样的,运算之后应该得到的答案是9,刚好被整除,此时就可以考虑加以修正,如果计算出0的话,返回9.
复杂度分析
时间复杂度 O(1)
空间复杂度 O(1)
代码
Java
public int addDigits(int num) {
if (num == 0) {
return 0;
}
int ans = num % 9;
if (ans == 0) {
return 9;
} else {
return ans;
}
}