200 words
1 minutes
树根(算法题)
简介
数根就是指将一个数的各位数字相加之后得到一个数字,若该数大于等于10则继续该运算所得到的那个数。
例如:
O(n) 解法
就是按照树根的定义来做。
public int addDigits(int num) { while(num>=10){ int [] tmp=getDigits(num); num=0; for(int i=0;i<tmp.length;i++){ num+=tmp[i]; } } return num; } public int[] getDigits(int num){ int tmp=num; int [] digits=new int[(int)Math.log(num)]; int index=0; while(tmp!=0){ digits[index]=tmp%10; tmp=tmp/10; index+=1; } return digits; }
O(1)解法
树根有一些很巧妙的数学规律,使得该题可以在O(1)时间内完成。
例:
我们发现一个数的各位数字之和和该数和9同余。
所以树根与原数也应该同余(当一个数为9的倍数时,树根即为9)、
public int addDigits(int num) { if(num==0){ return 0; } if(num%9==0){ return 9; }else{ return num%9; } }