我是靠谱客的博主 义气白羊,最近开发中收集的这篇文章主要介绍258:各位相加方法一方法二,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例

输入: 38
输出: 2 
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2

进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?

思路

通过模10求个位,然后各位相加即可。循环着来。(方法一)
通过对模进行观察,我们发现,所谓的模,比如说x%y,就是说x中包含有多少个y之后,还包含点啥东西。
12%10,我们会得到2,为啥?因为10被模去了。12,1代表的是10,2代表的是2. 我们如果想显示出来这个1怎么办?只能模9. 因为1的权重是10.
同理,我们可以发现,12%9 == 3, 100%9 == 1. 所以我们只需要对每个数模9,就得到了各位相加的和。so,那真的是9怎么办? 9%9等于0,所以9各位相加的和是0? 好问题。如果是这种情况,各位相加的和一定是9.因为只有9%9才等于0.(方法二)

抄了一位美女博主的解释:
时间复杂度为O(1)的解法:
在这里插入图片描述

方法一

Java版

class Solution {
    public int addDigits(int num) {
        while(num >= 10){
            int tmp = 0;
            while(num > 0){
                tmp += num%10;
                num/=10;
            }
            num = tmp;
        }
        return num;
    }
}

方法二

class Solution {
    public int addDigits(int num) {
        if(num!=0 && num%9==0) return 9;
        return num%9;
    }
}

最后

以上就是义气白羊为你收集整理的258:各位相加方法一方法二的全部内容,希望文章能够帮你解决258:各位相加方法一方法二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部