今天继续刷LeetCode,第258题,数字叠加。
分析:
这个题目简单,可以通过循环的方式,不断累加每位数字,并求和。再通过递归的方式判断是否是个位数。但是题目要求是否可以不用递归以及循环的方式实现,看了别人的代码后,知道通过分析数据结果,然后找规律。
问题:
1、代码的优化,尽量少用几个循环,少添加变量;
2、如果不用递归以及循环,那么只有通过找到数字的规律才可以。
附上C++代码1:
class Solution {
public:
int addDigits(int num) {
int s=0;
if(num<10)
return num;
while(num)
{
int temp=num%10;
s+=temp;
num=num/10;
}
num=s;
return addDigits(num);
}
};
附上C++代码2:
class Solution {
public:
int addDigits(int num) {
if(num==0)
return 0;
return (num-1)%9+1;
}
};
附上Python代码:
class Solution:
def addDigits(self, num: int) -> int:
if len(str(num))==1:
return num
sum=0
for i in str(num):
sum+=int(i)
if sum>9:
sum-=9
return sum