累加数

作者: xialu | 来源:发表于2022-01-10 21:46 被阅读0次

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number

题目描述:

累加数 是一个字符串,组成它的数字可以形成累加序列。
一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。
说明:累加序列里的数 不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。

示例 1:

输入:"112358"
输出:true
解释:累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8

示例 2:

输入:"199100199"
输出:true
解释:累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199

代码实现:
class Solution {
    String num;
    int n;
    List<List<Integer>> list = new ArrayList<>();
    public boolean isAdditiveNumber(String _num) {
        num = _num;
        n = num.length();
        return dfs(0);
    }
    boolean dfs(int u) {
        int m = list.size();
        if (u == n) return m >= 3;
        int max = num.charAt(u) == '0' ? u + 1 : n;
        List<Integer> cur = new ArrayList<>();
        for (int i = u; i < max; i++) {
            cur.add(0, num.charAt(i) - '0');
            if (m < 2 || check(list.get(m - 2), list.get(m - 1), cur)) {
                list.add(cur);
                if (dfs(i + 1)) return true;
                list.remove(list.size() - 1);
            }
        }
        return false;
    }
    boolean check(List<Integer> a, List<Integer> b, List<Integer> c) {
        List<Integer> ans = new ArrayList<>();
        int t = 0;
        for (int i = 0; i < a.size() || i < b.size(); i++) {
            if (i < a.size()) t += a.get(i);
            if (i < b.size()) t += b.get(i);
            ans.add(t % 10);
            t /= 10;
        }
        if (t > 0) ans.add(t);
        boolean ok = c.size() == ans.size();
        for (int i = 0; i < c.size() && ok; i++) {
            if (c.get(i) != ans.get(i)) ok = false;
        }
        return ok;
    }
}

相关文章

  • DML-数据操作

    添加数据 INSERT 给指定字段添加数据 给全部字段添加数据 批量添加数据 修改数据 UPDATE 不加wher...

  • 加法变乘法

    乘法就是指求几个相同加数的和的简便运算。 加数相同,加法变乘法。 相同加数×相同加数的个数 讲解乘法前,先让学生感...

  • 阿里 -贝尔 编程大赛 -002

    1.主观题解析 2.题目 3.知识点 设置被加数,加数,答案 连接加数与被加数: 如何进行计算添加声音 与 正确判...

  • 加减乘除算法奥义

    加法速算法 一、加大减差法 1、口诀:前面加数加上后面加数的整数,减去后面加数与整数的差等于和。 2、例题 137...

  • 累加数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/additi...

  • 聚餐我们是认真的!

    加白班加夜班,放假我们来聚餐, 工作苦工作累,为了生活无所谓! 辛苦工作打产量 为了工资加数量 品味生活高质量 今...

  • docker数据卷和数据镜像

    添加数据卷docker run的时候添加参数 -v /localpath:/dockerpath 添加数据卷容器...

  • Elasticsearch 添加数据

    Elasticsearch 添加数据 添加ES 数据 Elasticsearch 批量添加数据首先我们先构造一个 ...

  • laravel的增删改查

    1 . 增加数据 增加数据的两个函数 insert()和insertGetld() insert(数组) 可以...

  • leetcode 724 寻找数组的中心索引

    最开始用双指针,不求总和,停止条件整不对,先移动后加数字还是先加数字后移动还是先加数字后移动都不对。后来看了评论,...

网友评论

      本文标题:累加数

      本文链接:https://www.haomeiwen.com/subject/acevcrtx.html