zoukankan      html  css  js  c++  java
  • 46. Permutations

    Given a collection of distinct integers, return all possible permutations.

    Example:

    Input: [1,2,3]
    Output:
    [
      [1,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]

    backtracking

    为了防止值重复,用visited数组标记该元素在每一层递归的时候是否被访问过,注意递归到最底层pop元素回到上层的时候,要把此元素的visited状态改成false

    time: O(n! * n), space: O(n)

    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> res = new ArrayList<>();
            boolean[] visited = new boolean[nums.length];
            backtracking(nums, 0, visited, new ArrayList<>(), res);
            return res;
        }
        
        private void backtracking(int[] nums, int idx, boolean[] visited, List<Integer> tmp, List<List<Integer>> res) {
            if(tmp.size() == nums.length) res.add(new ArrayList<>(tmp));
            
            for(int i = 0; i < nums.length; i++) {
                if(visited[i]) continue;
                visited[i] = true;
                tmp.add(nums[i]);
                backtracking(nums, i + 1, visited, tmp, res);
                tmp.remove(tmp.size() - 1);
                visited[i] = false;
            }
        }
    }
  • 相关阅读:
    Ztree下拉框多选
    FullCalendar日程插件
    viscose 前端常用插件
    一些词
    关于require()和export引入依赖的区别
    关于CMD/AMD和Common.js/Sea.js/Require.js
    vue中的双向数据绑定原理简单理解
    Vue-cli简单使用
    webpack简单配置
    vuex基础
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10077701.html
Copyright © 2011-2022 走看看