日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

全排列 leetcode java_LeetCode--046--全排列(java)

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全排列 leetcode java_LeetCode--046--全排列(java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個沒有重復數字的序列,返回其所有可能的全排列。

示例:

輸入: [1,2,3]

輸出:

[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

無奈,用swap的方法從左向右滑動,直到最后結果和最初的一致停止,只適用于三位數。。。。(改進一下讓每個數字作為第一位后面的進行滑動,應該可以pass,放棄)

錯:

1 classSolution {2 public static void swap(int[] nums_,int a,intb){3 int temp =nums_[a];4 nums_[a] =nums_[b];5 nums_[b] =temp;6 }7 public static boolean isEqual(int[] a,int[] b){8 for(int i = 0;i < a.length;i++){9 if(a[i] != b[i])return false;10 }11 return true;12 }13 public List> permute(int[] nums) {14 List> res = newArrayList();15 List lists = newArrayList();16 if(nums.length < 2){17 lists.add(nums[0]);18 res.add(lists);19 returnres;20 }21 int[] nums_ = new int[nums.length];22 for(int k = 0;k < nums.length;k++){23 nums_[k] =nums[k];24 lists.add(nums[k]);25

26 }27 res.add(newArrayList(lists));28 lists.removeAll(lists);29 swap(nums_,0,1);30 for(int j = 0;j < nums.length;j++){31 lists.add(nums_[j]);32 }33 res.add(newArrayList(lists));34 int i = 1;35 while(!isEqual(nums,nums_)){36 if(i+1

53 }

正確做法bt: ?添加順序就是[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]

[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2],

[2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1],

[3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1],

[4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]

TIME:O(N!*N)(整體來說)

SPACE:O(N)

1 classSolution {2

3 public List> permute(int[] nums) {4 List> res = new ArrayList<>();5 if(nums== null || nums.length ==0)returnres;6 helper(res,new ArrayList<>(),nums);7 returnres;8 }9 public void helper(List> res,List list,int[] nums){10 if(list.size() ==nums.length){11 res.add(new ArrayList<>(list));12 return;13 }14 for(int i = 0;i < nums.length;i++){15 if(list.contains(nums[i]))continue;//contaisn的時間復雜度為O(N)16 list.add(nums[i]);17 helper(res,list,nums);18 list.remove(list.size()-1);19 }20 }21

22 }

如果遞歸符合T(n) = T(n-1)+T(n-2)+....T(1)+T(0) ?時間復雜度基本符合O(2^n),如果在其中的一些步驟可以省略,則可以簡化為O(n!)

對于方法1思想的完善:

TIME:O(N)

SPACE:O(N)

1 classSolution {2

3 public List> permute(int[] nums) {4 List> res = new ArrayList<>();5 if(nums.length == 0 || nums == null)returnres;6 helper(res,0,nums);7 returnres;8 }9 public void helper(List> res,int start,int[] nums){10 if(start ==nums.length){11 List list = new ArrayList<>();12 for(intq:nums){13 list.add(q);14 }15 res.add(new ArrayList<>(list));16 return;17 }18 for(int i = start;i < nums.length;i++){19 swap(nums,start,i);20 helper(res,start+1,nums);21 swap(nums,start,i);22 }23

24 }25 public void swap(int[] nums,int l,intm){26 int temp =nums[l];27 nums[l] =nums[m];28 nums[m] =temp;29 }30

31 }

2019-05-04?10:45:10

總結

以上是生活随笔為你收集整理的全排列 leetcode java_LeetCode--046--全排列(java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。