消零燕归来算法刷题

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%的用户。

运行结果

关注更多

更多链接:更多链接

上一篇 下一篇

猜你喜欢

热点阅读