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之路的主要内容,如果未能解决你的问题,请参考以下文章