字符串转数组_每日一题 | Day 46: 842. 将数组拆分成斐波那契序列

要想结识蝴蝶,就得先忍受两三只毛毛虫的叮咬。

字符串转数组_每日一题 | Day 46: 842. 将数组拆分成斐波那契序列_第1张图片

题目描述

字符串转数组_每日一题 | Day 46: 842. 将数组拆分成斐波那契序列_第2张图片

字符串转数组_每日一题 | Day 46: 842. 将数组拆分成斐波那契序列_第3张图片

题解

采用回溯法进行求解,对于回溯法,首先要屡清楚回溯法结束的条件,这道题的条件是

  •  如果字符串遍历完,并且得到正确的fn = fn-1 + fn-2,则返回true;

其次,在每次尝试的过程中,需要进行剪枝,提前结束循环,根据给出的条件可以得到剪枝条件

  • 不以0开头;

  • 当前数字不能大于2^31 - 1.

代码

语言:Java

class Solution {
      
    public List splitIntoFibonacci(String S) { List ans = new ArrayList<>();
        backtrack(S.toCharArray(), ans, 0);return ans;
    }
    public boolean backtrack(char[] nums, List res, int start) { int n = nums.length;// 边界条件判断,如果截取完了,并且res长度大于等于3,表示找到了一个组合。if (start == n && res.size() >= 3) { return true;
        }
        long num = 0;for (int i = start; i             // 两位以上的数字不能以0开头if (nums[start] == '0' && i > start) { break;
            }// 截取字符串转化为数字num = num * 10 + nums[i] - '0';// 如果截取的数字大于int的最大值,则终止截取if (num > Integer.MAX_VALUE) { return false;
            }int size = res.size();// 如果截取的数字大于res中前两个数字的和,说明这次截取的太大,直接终止,因为后面越截取越大if (size >= 2 && num > res.get(size - 1) + res.get(size - 2)) { return false;
            }if (size <= 1 || num == res.get(size - 1) + res.get(size - 2)) { // 把数字num添加到集合res中
                res.add((int) num);//如果找到了就直接返回if (backtrack(nums, res, i + 1))return true;//如果没找到,就会走回溯这一步,然后把上一步添加到集合res中的数字给移除掉
                res.remove(res.size() - 1);
            }
        }return false;
    }
}

每一件事情,最难的不是开始,而是坚持!

(LeetCode历史刷题回顾)

5. 最长回文子串

8.字符串转整数

13. 罗马数字转整数

14. 最长公共前缀

31. 下一个排列

33. 搜索旋转排序数组

34. 在排序数组中查找元素的第一个和最后一个位置

46. 全排列

57.插入区间

58. 最后一个单词的长度

70.爬楼梯

74. 搜索二维矩阵

92. 反转链表 II

118.杨辉三角

122. 买股票的最佳时机②

124. 二叉树中的最大路径和

127.单词接龙

134. 加油站

148.排序列表

160. 相交链表

164.最大间距

204. 计数质数

222.完全二叉树的节点个数

234. 回文链表

236. 二叉树的最近公共祖先

242.有效的字母异位数

283. 移动零

300. 最长上升子序列

321. 拼接最大数(hard)

327. 区间和的个数

328. 奇偶链表

349.两个数组的交集

402.移掉K位数字

406.根据身高重构队列

415. 字符串相加

452.用最少数量的箭引爆气球

454.四数相加②

493.翻转对

514.自由之路

621. 任务调度器

659. 分割数组为连续子序列

767.重构字符串

861. 翻转矩阵后的得分

876. 链表的中间结点

922.按奇偶排序数组②

941. 有效的山脉数组

973. 最接近远点的k个数

976.三角形最大周长

1030. 距离顺序排列矩阵单元格

1122. 数组的相对顺序

1356.根据数字二进制下 1 的数目排序

1370.上升下降字符串

© THE END 

你可能感兴趣的:(字符串转数组)