LeetCode --- Add Digits解题分析

题目内容:将一个非负整数,通过不断循环将各个位置上的数字相加,最终为一位数时即为所求结果。比如:

num = 38
3 + 8 = 11
1 + 1 = 2
结果就输出2


解题思路一:蛮力求解,将数字逐位相加,循环这样做,至一位数时即为所求结果

int solution1(int n){//调用getSum,判断返回值如果不是一位数继续调用getSum求和
	int result = getSum(n);
	while(result > 9){
		result = getSum(result);
	}
	return result;
}
int getSum(int n){//求一个数的各位数相加之和
	int sum = 0;
	while(n > 0){
		sum += (n%10);
		n = n/10;
	}
	return sum;
}

解题思路二:以三位数字为例,设num=xyz

num = x * 100 + y * 10 + z = x + y + z + ( x * 99 + y * 9 )

(1)则后面部分一定可被9整除,所以num%9的结果与(x+y+z)%9的结果一样;

(2)因为(x + y) % z = (x % z + y % z) % z,又因为 x % z % z = x % z;

(3)因为最终一位数的结果肯定为0-9,而0-8模9仍是原来的数,9%9=0,显然违背题意

综上所述结果可以写成 (num - 1) % 9 + 1,只模除9一次,并将模除后的结果加一返回即为所求

int solution2(int n){
	return (n-1)%9 + 1;
}
















你可能感兴趣的:(LeetCode,Algorithm)