飞道的博客

leetcode46. 全排列

356人阅读  评论(0)

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

示例:

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

思路:搜索回溯经典题


  
  1. class Solution {
  2. int[] visited; //标记数组
  3. List<List<Integer>> res = new ArrayList<>(); //答案
  4. public List<List<Integer>> permute( int[] nums) {
  5. visited = new int[nums.length];
  6. backtrack(nums, new ArrayList<Integer>());
  7. return res;
  8. }
  9. private void backtrack(int[] nums, ArrayList<Integer> tmp) {
  10. if (tmp.size() == nums.length) {
  11. res.add( new ArrayList<>(tmp));
  12. return;
  13. }
  14. for ( int i = 0; i < nums.length; i++) {
  15. if (visited[i] == 1) continue;
  16. visited[i] = 1;
  17. tmp.add(nums[i]);
  18. backtrack(nums, tmp);
  19. visited[i] = 0;
  20. tmp.remove(tmp.size() - 1);
  21. }
  22. }
  23. }

 


转载:https://blog.csdn.net/hebtu666/article/details/104037165
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场