Leetcode 258 题目解答:将一个非负整数各位相加,若和不为一位数,则继续各位相加直至得到一个个位数,且求出该数为多少。
设 n = 10000a + 1000b + 100 才 + 10d + c
可化为:n = a + b + c + d + e + (9999a + 999b + 99c + 9d)
可以看出,n 和 a+b+c+d+e(即 n 的各个位数之和)模 9 同余
所以只要对 n 不断地进行模 9 的操作,最终会得到 n = n1 + n2,其中 n1 为 0-8 之间任意数,n2 可以被 9 整除
然而题意中各个位数之和最终得到的各位数的范围应为 1-9 的整数 ,可做以下变换:
n % 9 = [(n - 1) + 1] % 9 = (n - 1) % 9 + 1 % 9 = (n - 1) % 9 + 1
解题代码如下:
- class Solution {
- public: int addDigits(int num) {
- return (num - 1) % 9 + 1;
- }
- };
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/03-03/17999260.html