LeetCode 306 累加数[回溯 DFS] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 306 累加数[回溯 DFS] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
好久没做到回溯的题目了,这不来了一题,有关字符串转数字的回溯,其实说白了就是字符串的分割。定义一个分割数组,用来存放分割的字符串转成的long double数据(因为可能很大)。接着就进行DFS,遍历所有情况进行分割,剪枝的话直接对零开始的非个位数的数直接break掉,判断过程分为两步,第一步是判断数组中后三个数是否满足累加条件,第二个是当dfs中输入的字符串长度为0且数组长度满足累加条件的个数,返回true。代码如下:

class Solution 
public:
    bool isAdditiveNumber(string num) 
        vector<long double> temp;
        return dfs(num, temp);
    

    bool dfs(string num, vector<long double> temp) 
        int n = temp.size();
        // 不满足累加条件
        if(n >= 3 && temp[n - 1] != temp[n - 2] + temp[n - 3]) return false;
        // 分割成功
        if(num.size() == 0 && n >= 3) return true;
        for(int i = 0; i < num.size(); i ++) 
            string cur = num.substr(0, i + 1);
            if(num[0] == '0' && cur.size() > 1) break;
            temp.push_back(stold(cur));
            if(dfs(num.substr(i + 1), temp)) return true;
            // 回溯
            temp.pop_back(); 
        
        return false;
    
;

以上是关于LeetCode 306 累加数[回溯 DFS] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《306》|累加数

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

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

dfs回溯暴力处理题——累加数

306. 累加数Normal穷举

306. 累加数