常規思路:分別獲取num的位上的值進行相加,判斷相加后的結果result,如果result小於10,返回值,否則獲取result的位上的值進行相加,判斷相加后的結果,直到結果小於10,輸出結果
代碼:
class Solution { public int addDigits(int num) { int sum=0; while(num>9){ sum+=num%10; num/=10; } sum+=num; if(sum<10){ return sum; }else{ return addDigits(sum); } } }
不用循環和遞歸:
分析:
對於二位數ab=a*10+b:
ab%9=(10*a+b)%9=(a+b)%9
對於三位數abc=a*100+10*b+c:
abc%9=(a+b+c)%9
所以:
對於一般整數來說直接對整數進行對9求余,便可得到小於10的結果。而對於整除結果,如18,正確結果為9,而按上述規則則為0,所以不適用,通過規律可得,除0以外,能被9整除的數各位相加后其值最終為9(因為各位數相加后始終能被9整除),所以便可得出結果。
代碼:
class Solution { public int addDigits(int num) { if(num==0){ return 0; } int i=num%9; if(i==0){ return 9; }else{ return i; } } }