zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    8.1 管道符| 使用技巧
    7.1 elementui的radio无法选中问题
    2.0 es6数组操作
    小练习-双数日期
    匿名函数、三元表达式、列表生成式
    sys.argv
    常用模块 os,sys,
    Python操作数据库
    Python time模块
    加密模块hashlib
  • 原文地址:https://www.cnblogs.com/MissWX/p/14101538.html
Copyright © 2011-2022 走看看