LeetCode刷题-各位相加
2021-07-25 本文已影响0人
小鲨鱼FF
前言说明
算法学习,日常刷题记录。
题目连接
题目内容
给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于2是一位数,所以返回2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
分析过程
思路:通过整数num除以10是否大于0判断整数num是否为一位数。
若整数num不是一位数,计算各位相加的和,通过调用函数getPositionSum来判断,调用函数getPositionSum时,传递参数num。
函数getPositionSum,用来计算各位相加的和,如下:
定义各位相加的和为sum,循环判断整数num是否大于0。
若大于0,结束循环,返回各位相加的和sum。
若小于等于0,进行循环操作,通过整数num对10取余获取数位上的值,定义为res,各位相加的和sum累加数位上的值res,整数num除以10减少一位。
解答代码
class Solution {
public int addDigits(int num) {
// 通过整数num除以10是否大于0判断整数num是否为一位数
while (num / 10 > 0) {
// 若整数num不是一位数,计算各位相加的和
num = getPositionSum(num);
}
// 若是整数num是一位数,则返回整数num作为结果
return num;
}
// 计算各位相加的和
private int getPositionSum(int num) {
// 定义各位相加的和
int sum = 0;
while (num > 0) {
// 通过整数num对10取余获取数位上的值
int res = num % 10;
// 累加数位上的值
sum += res;
// 整数num除以10减少一位
num = num / 10;
}
return sum;
}
}
提交结果
执行用时1ms,时间击败100.00%的用户,内存消耗35.6MB,空间击败42.14%的用户。
![](https://img.haomeiwen.com/i4362697/ad3b188ac447d245.png)
关注更多
更多链接:更多链接