leetcode 1月10日每日一题 306. 累加数

Posted 陵游gentian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 1月10日每日一题 306. 累加数相关的知识,希望对你有一定的参考价值。

306. 累加数

思路分析:
枚举第一个数和第二个数,高精度加法算出第三个数,然后进行比较

AC代码:

// C++
class Solution 
public:
    // 高精度加法板子
    string add(string x, string y) 
        vector<int> A, B, C;![请添加图片描述](https://img-blog.csdnimg.cn/d5eaa9b0fe2e4870ba30d7c7c01419a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zev5oiR5oOz5oOz,size_20,color_FFFFFF,t_70,g_se,x_16)

        // 先将 x,y 反向存入 vector
        for(int i = x.size() - 1; i >= 0; i--) A.push_back(x[i] - '0');
        for(int i = y.size() - 1; i >= 0; i--) B.push_back(y[i] - '0');
        // 模拟加法开始
        for(int i = 0, t = 0; i < A.size() || i < B.size() || t; i++) 
            if(i < A.size()) t += A[i];
            if(i < B.size()) t += B[i];
            C.push_back(t % 10);
            t /= 10;
        
        string z;
        for(int i = C.size() - 1; i >=0; i--) z += to_string(C[i]);
        return z;
    

    bool isAdditiveNumber(string num) 
        for(int i = 0; i < num.size(); i++)
            for(int j = i + 1; j + 1 < num.size(); j++) 
                // 第一个数 a+1 到 b
                // 第二个数 b+1 到 c
                // 第三个数 c+1 到 ... 
                // 所以a的初值从 -1 开始 
                int a = -1, b = i, c = j;
                while(true) 
                    if((b - a > 1 && num[a + 1] == '0') || (c - b > 1 && num[b + 1] == '0')) break;    // 有前导0 不合法
                    auto x = num.substr(a + 1, b - a), y = num.substr(b + 1, c - b);
                    auto z = add(x, y);
                    if(num.substr(c + 1, z.size()) != z) break;
                    a = b, b = c, c += z.size();
                    if(c + 1 == num.size()) return true;
                
               
        return false;
    
;

以上是关于leetcode 1月10日每日一题 306. 累加数的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 1月13日每日一题 747. 至少是其他数字两倍的最大数

leetcode 1月9日每日一题 1629. 按键持续时间最长的键

leetcode 1月9日每日一题 1629. 按键持续时间最长的键

leetcode 1月12日每日一题 334. 递增的三元子序列

leetcode 1月12日每日一题 334. 递增的三元子序列

leetcode 1月13日每日一题 747. 至少是其他数字两倍的最大数