广西网站建设原创,做的很好的网站,深圳网站开发外包,公司邮箱怎么在自己电脑上登录给定一个非负整数 num#xff0c;反复将各个位上的数字相加#xff0c;直到结果为一位数。
示例:
输入: 38 输出: 2 解释: 各位相加的过程为#xff1a;3 8 11, 1 1 2。 由于 2 是一位数#xff0c;所以返回 2。 进阶: 你可以不使用循环或者递归#xff0c;且在 O(…给定一个非负整数 num反复将各个位上的数字相加直到结果为一位数。
示例:
输入: 38 输出: 2 解释: 各位相加的过程为3 8 11, 1 1 2。 由于 2 是一位数所以返回 2。 进阶: 你可以不使用循环或者递归且在 O(1) 时间复杂度内解决这个问题吗
思路我想的是给的int是有范围的我就重复很多次即可。
class Solution {public int addDigits(int num) {num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;num num % 10 num / 10;return num;}
}
这是所谓正解确实开阔了思路
除了传统的单纯循环还可以找规律。假如一个三位数abc其值大小为s1 100 * a 10 * b 1 * c经过一次各位相加后变为s2 a b c减小的差值为(s1 -s2) 99 * a 9 * b差值可以被9整除每一个循环都这样缩小了9的倍数。当num小于9即只有一位时直接返回num大于9时如果能被9整除则返回9因为不可能返回0也不可能返回两位数及以上的值如果不能被整除就返回被9除的余数。
class Solution:def addDigits(self, num: int) - int:if num 9:num num % 9if num 0:return 9return num