LeetCode-258. Add Digits

Description

这里写图片描述

Example

这里写图片描述

Follow Up

这里写图片描述

Solution 1(C++)

class Solution {
public:
    int addDigits(int num) {
        int sum=11;
        while(sum/10 != 0){
            sum=0;
            while(num != 0){
                sum += num % 10;
                num /= 10;
            }
            num= sum;
        }
        return sum;
    }
};

Solution 2(C++)

class Solution {
public:
    int addDigits(int num) {
        if(num /10 == 0) return num;
        vector<int> index{ 9,1,2,3,4,5,6,7,8 };
        return index[num%9];
    }
};

算法分析

解法一: 解法一就是最简单的按照题目的意思来做了,没什么难度。

解法二: 解法二稍微绕了一个弯,但是其实如果做多了题目的话,就会有一种直觉,因为答案被题目限制了,答案只可能是一个数字,所以只能是0~9.那么答案的种类个数限制了,说明答案肯定会重复出现,结合题目要求,能不能不使用循环,而在常数时间内解决问题,可以猜出应该要找到答案暗含的某种规律。

这种规律我就不罗嗦了。多写几个就能发现。所以这道题我觉得不光要能找到规律(当然这种找规律的题目一般初高中做的多了)。对于现在更应该把握这种题目的解题思路。养成程序员思考问题的一种习惯。

大话废话说了这么多,其实说白了,要怎么做呢?无非就是多看多做多总结多复习。

程序分析

程序编写没什么难度,但可以稍微复习一些常用代码段:

计算一个数的各个位数的和:

while(num != 0){
    sum += num % 10;
    num /= 10;
}

用数组的方式初始化一个vector:

vector<int> index{ 9,1,2,3,4,5,6,7,8 };

vector容器相关知识如果日后的我复习到了这一题,有功夫的话还是去看看:C++-std::Vector

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值