letcode每日一题-将数组拆分成斐波那契序列

今天的每日一题用到了回溯算法,这个我不是太熟悉,最后去借鉴了题解,但是不管怎么说还是来记录一下:
回溯算法简介:
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不
满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到
目标。
题目描述:


思路:
1.我们先确定第一个数和第二个数,然后判断相加能否找到紧邻的第三个数,如果能找到则继续第四个,依
次继续
2.如果不能找到紧邻的第三个数。则删除刚刚的插入,再继续第一步。
3.特殊处理开头是0的字符串
代码实现如下:


public boolean panduan(int prev, int index, int sum, String S, ArrayList<Integer> deque){
        if(index==S.length()){
            return deque.size()>2;
        }
        long cuur_long=0L;
        //尝试不同的前缀
        for(int i=index;i<S.length();i++){
            if(i>index && S.charAt(index)=='0'){
                break;
            }
            cuur_long=cuur_long*10+S.charAt(i)-'0';
            if(cuur_long>Integer.MAX_VALUE){
                break;
            }
            int curr=(int)cuur_long;
            //deque<2 的时候我们先确定第一个数和第二个数
            if(deque.size()>=2){
                //确定第一个第二个数后开始判断是否构成斐波那契数
                if(curr<sum){
                    continue;
                }else if(curr>sum){
                    break;
                }
            }
            deque.add(curr);
            if(panduan(curr, i+1, curr+prev,S,  deque)){
                return true;
            }else {
                //不满足进行删除
                deque.remove(deque.size()-1);
            }
        }
        return false;
    }

letcode链接地址:https://leetcode-cn.com/problems/split-array-into-fibonacci-sequence/

posted @ 2020-12-08 11:07  CodeWangHAHA  阅读(71)  评论(0编辑  收藏  举报