Description
Example
Follow Up
Solution 1(C++)
class Solution {
public:
int addDigits(int num) {
int sum=11;
while(sum/10 != 0){
sum=0;
while(num != 0){
sum += num % 10;
num /= 10;
}
num= sum;
}
return sum;
}
};
Solution 2(C++)
class Solution {
public:
int addDigits(int num) {
if(num /10 == 0) return num;
vector<int> index{ 9,1,2,3,4,5,6,7,8 };
return index[num%9];
}
};
算法分析
解法一: 解法一就是最简单的按照题目的意思来做了,没什么难度。
解法二: 解法二稍微绕了一个弯,但是其实如果做多了题目的话,就会有一种直觉,因为答案被题目限制了,答案只可能是一个数字,所以只能是0~9.那么答案的种类个数限制了,说明答案肯定会重复出现,结合题目要求,能不能不使用循环,而在常数时间内解决问题,可以猜出应该要找到答案暗含的某种规律。
这种规律我就不罗嗦了。多写几个就能发现。所以这道题我觉得不光要能找到规律(当然这种找规律的题目一般初高中做的多了)。对于现在更应该把握这种题目的解题思路。养成程序员思考问题的一种习惯。
大话废话说了这么多,其实说白了,要怎么做呢?无非就是多看多做多总结多复习。
程序分析
程序编写没什么难度,但可以稍微复习一些常用代码段:
计算一个数的各个位数的和:
while(num != 0){
sum += num % 10;
num /= 10;
}
用数组的方式初始化一个vector:
vector<int> index{ 9,1,2,3,4,5,6,7,8 };
vector容器相关知识如果日后的我复习到了这一题,有功夫的话还是去看看:C++-std::Vector。