zoukankan      html  css  js  c++  java
  • [LeetCode] 46. 全排列(回溯)

    题目

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

    示例:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/permutations
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题解

    • 回溯
    • 使用位掩码数组的方式可以模拟集合拿出放入,以处理int[] num的拿出放入,否则用集合在遍历的同时要拿出放入不易实现。
    • 最后加到结果集合的结果要使用拷贝,若是将结果以引用方式存入结果集若后面更改则会造成结果集的结果错误。

    代码

    class Solution {
    	public List<List<Integer>> permute(int[] nums) {
    		List<List<Integer>> ansList = new LinkedList<>();
    		boolean[] visited = new boolean[nums.length];
    		traceBack(nums, visited, new LinkedList<>(), ansList);
    		return ansList;
    	}
    
    	private void traceBack(int[] nums, boolean[] visited, LinkedList<Integer> ans,
    			List<List<Integer>> ansList) {
    		if (ans.size() == nums.length) {
    			ansList.add(new LinkedList<>(ans));// 要new 否则存在ansList里的ans最后都被清成空List了
    			return;
    		}
    
    		for (int i = 0; i < visited.length; ++i) {
    			if (!visited[i]) {
    				ans.addLast(nums[i]);
    				visited[i] = true;
    				traceBack(nums, visited, ans, ansList);
    				ans.removeLast();
    				visited[i] = false;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    java 重定向和转发的区别
    Python练习100则--部分概念的没有做
    MYSQL忘记root密码后如何修改
    二分查找注意点
    数据库连接串整理
    MYSQL mysqldump数据导出详解
    MVCC的一些理解
    MySQL 加锁处理分析-转载
    扩展1
    maven-windows使用
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/12070901.html
Copyright © 2011-2022 走看看