栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode-306-累加数-枚举-模拟

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-306-累加数-枚举-模拟

原题链接

Note:

给一个字符串,判断一下这个字符串是不是斐波那契,但是没有给分出来数字

要挨个去枚举第一个数和第二个数

两个循环分别去枚举第一个数的结尾和第二个数的结尾

然后还要用到第一个数开头的前一个位置和第二个数开头的前一个位置
这里分别就是-1和第一个数的结尾

这样计算第一个数的长度的时候,数的结尾 - 数开头的前一个
后面需要算子串的时候找个例子画一下就知道了

整体流程大概就是,两重for循环去枚举两个数的结尾
判断一下有没有前导0,如果有说明当前不成立
大整数加法,用字符串表示,求一下和,看看后面的位置对不对的上,对不上则说明当前不成立
更新下一次要遍历的位置,如果第二个数的结尾已经走到了结尾了,说明是成立的,返回true

代码如下:
class Solution {
public:

    string add(string a, string b){
        vectorA, B, C;
        string ans;
        for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
        for(int i = b.size() - 1; i >= 0; i --) B.push_back(b[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;
        }
        for(int i = C.size() - 1; i >= 0; i --)
            ans += to_string(C[i]);
        return ans;
    }

    bool isAdditiveNumber(string num) {
        for(int i = 0; i < num.size(); i ++)
            for(int j = i + 1; j + 1 < num.size(); j ++){
                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;
                    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 == num.size() - 1) return true;
                }
            }
        return false;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号