美文网首页
算法记录 | Day25 回溯算法(05)

算法记录 | Day25 回溯算法(05)

作者: perry_Fan | 来源:发表于2022-11-23 15:50 被阅读0次

    【491.递增子序列】

    给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。

    示例:

    输入: [4, 6, 7, 7]
    输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
    说明:

    给定数组的长度不会超过15。
    数组中的整数范围是 [-100,100]。
    给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。

    class Solution {
        //结果集合
        List<List<Integer>> res = new ArrayList<>();
        //路径集合
        LinkedList<Integer> path = new LinkedList<>();
        public List<List<Integer>> findSubsequences(int[] nums) {
            getSubsequences(nums,0);
            return res;
        }
        private void getSubsequences( int[] nums, int start ) {
            if(path.size()>1 ){
                res.add( new ArrayList<>(path) );
                // 注意这里不要加return,要取树上的节点
            }
            HashMap<Integer,Integer> map = new HashMap<>();
            for(int i=start ;i < nums.length ;i++){
                if(!path.isEmpty() && nums[i]< path.getLast()){
                    continue;
                }
                // 使用过了当前数字
                if ( map.getOrDefault( nums[i],0 ) >=1 ){
                    continue;
                }
                map.put(nums[i],map.getOrDefault( nums[i],0 )+1);
                path.add( nums[i] );
                getSubsequences( nums,i+1 );
                path.removeLast();
            }
        }
    }
    

    【46.全排列】

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。

    示例:

    输入: [1,2,3]
    输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

    【47.全排列 II】

    
    

    相关文章

      网友评论

          本文标题:算法记录 | Day25 回溯算法(05)

          本文链接:https://www.haomeiwen.com/subject/salaxdtx.html