From aada04d4f47cd3a2732ee24e68ccf6e985df44de Mon Sep 17 00:00:00 2001 From: yennanliu Date: Sat, 8 Jun 2024 17:32:46 +0800 Subject: [PATCH] update 46 java, progress --- data/progress.txt | 2 +- data/to_review.txt | 18 +++--- .../LeetCodeJava/BackTrack/Permutations.java | 62 ++++++++++++++++++- .../src/main/java/dev/workspace3.java | 45 ++++++++++++++ 4 files changed, 115 insertions(+), 12 deletions(-) diff --git a/data/progress.txt b/data/progress.txt index 89e6fce1..49614962 100644 --- a/data/progress.txt +++ b/data/progress.txt @@ -1,4 +1,4 @@ -20240608: 503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78 +20240608: 503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46 20240607: 235(ok),236(again),496(again!!!),110(ok),1448(again!) 20240606: 206,143,138(again),141,needcode_tree,226,104,110(again!!!) 20240605: 150,22(again),739(again!!!),needcode_linkedlist diff --git a/data/to_review.txt b/data/to_review.txt index c55de307..ada3b9f3 100644 --- a/data/to_review.txt +++ b/data/to_review.txt @@ -1,4 +1,4 @@ -2024-08-02 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78'] +2024-08-02 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46'] 2024-08-01 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)'] 2024-07-31 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)'] 2024-07-30 -> ['150,22(again),739(again!!!),needcode_linkedlist'] @@ -18,7 +18,7 @@ 2024-07-15 -> ['322,191,190'] 2024-07-14 -> ['73,200,70,323(again)'] 2024-07-13 -> ['207,79,206,213,198'] -2024-07-12 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '212(todo),211,338,208(again)'] +2024-07-12 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '212(todo),211,338,208(again)'] 2024-07-11 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '347,253(todo),91(todo),217'] 2024-07-10 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '226,98,253(todo)'] 2024-07-09 -> ['150,22(again),739(again!!!),needcode_linkedlist', '104,230,102,100'] @@ -30,7 +30,7 @@ 2024-07-02 -> ['11,647,261(again),133(again)'] 2024-07-01 -> ['143,15,268,141,139'] 2024-06-30 -> ['21,20,19,271,269'] -2024-06-29 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '417(again),33,153,152'] +2024-06-29 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '417(again),33,153,152'] 2024-06-28 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '424,297(todo),295(todo),39'] 2024-06-27 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '55,54(todo),53(again),435(again),49,48(todo),300(again)'] 2024-06-26 -> ['150,22(again),739(again!!!),needcode_linkedlist', '56'] @@ -38,19 +38,19 @@ 2024-06-24 -> ['146,460,582(ok*),139(ok),322(todo)', '322,191,190'] 2024-06-23 -> ['127,742(again),133(again),207(ok*),261(ok)', '73,200,70,323(again)'] 2024-06-22 -> ['128,261', '207,79,206,213,198'] -2024-06-21 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '005,003(again)', '212(todo),211,338,208(again)'] +2024-06-21 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '005,003(again)', '212(todo),211,338,208(again)'] 2024-06-20 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '347,253(todo),91(todo),217'] 2024-06-19 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '11,647,261(again),133(again)', '226,98,253(todo)'] 2024-06-18 -> ['150,22(again),739(again!!!),needcode_linkedlist', '143,15,268,141,139', '104,230,102,100'] 2024-06-17 -> ['567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '21,20,19,271,269', '105,106'] -2024-06-16 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '146,460,582(ok*),139(ok),322(todo)', '417(again),33,153,152', '242,235'] +2024-06-16 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '146,460,582(ok*),139(ok),322(todo)', '417(again),33,153,152', '242,235'] 2024-06-15 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '127,742(again),133(again),207(ok*),261(ok)', '424,297(todo),295(todo),39', '371'] 2024-06-14 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '128,261', '55,54(todo),53(again),435(again),49,48(todo),300(again)', '121,252'] -2024-06-13 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '150,22(again),739(again!!!),needcode_linkedlist', '005,003(again)', '56', '125'] +2024-06-13 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '150,22(again),739(again!!!),needcode_linkedlist', '005,003(again)', '56', '125'] 2024-06-12 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '62,572,57'] -2024-06-11 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '146,460,582(ok*),139(ok),322(todo)', '11,647,261(again),133(again)', '322,191,190'] -2024-06-10 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '235(ok),236(again),496(again!!!),110(ok),1448(again!)', '150,22(again),739(again!!!),needcode_linkedlist', '127,742(again),133(again),207(ok*),261(ok)', '143,15,268,141,139', '73,200,70,323(again)'] -2024-06-09 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78', '235(ok),236(again),496(again!!!),110(ok),1448(again!)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '128,261', '21,20,19,271,269', '207,79,206,213,198'] +2024-06-11 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '146,460,582(ok*),139(ok),322(todo)', '11,647,261(again),133(again)', '322,191,190'] +2024-06-10 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '235(ok),236(again),496(again!!!),110(ok),1448(again!)', '150,22(again),739(again!!!),needcode_linkedlist', '127,742(again),133(again),207(ok*),261(ok)', '143,15,268,141,139', '73,200,70,323(again)'] +2024-06-09 -> ['503(todo),739(todo),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46', '235(ok),236(again),496(again!!!),110(ok),1448(again!)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '128,261', '21,20,19,271,269', '207,79,206,213,198'] 2024-06-08 -> ['235(ok),236(again),496(again!!!),110(ok),1448(again!)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '150,22(again),739(again!!!),needcode_linkedlist', '146,460,582(ok*),139(ok),322(todo)', '005,003(again)', '417(again),33,153,152', '212(todo),211,338,208(again)'] 2024-06-07 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '150,22(again),739(again!!!),needcode_linkedlist', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '127,742(again),133(again),207(ok*),261(ok)', '424,297(todo),295(todo),39', '347,253(todo),91(todo),217'] 2024-06-06 -> ['150,22(again),739(again!!!),needcode_linkedlist', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '146,460,582(ok*),139(ok),322(todo)', '128,261', '11,647,261(again),133(again)', '55,54(todo),53(again),435(again),49,48(todo),300(again)', '226,98,253(todo)'] diff --git a/leetcode_java/src/main/java/LeetCodeJava/BackTrack/Permutations.java b/leetcode_java/src/main/java/LeetCodeJava/BackTrack/Permutations.java index a3327eb4..946938a5 100644 --- a/leetcode_java/src/main/java/LeetCodeJava/BackTrack/Permutations.java +++ b/leetcode_java/src/main/java/LeetCodeJava/BackTrack/Permutations.java @@ -6,12 +6,70 @@ public class Permutations { - List> ans = new ArrayList<>(); - // V0 // IDEA : BACKTRACK + /** NOTE !!! + * + * for Permutations, + * + * 1) NO NEED "start_idx" since CAN'T get duplicated element + * 2) via "!cur.contains(nums[i])" to NOT use duplicated element in recursive call within for loop + */ public List> permute(int[] nums) { + List> res = new ArrayList<>(); + + if (nums.length == 1){ + List cur = new ArrayList<>(); + cur.add(nums[0]); + //System.out.println("cur = " + cur); + res.add(cur); + //System.out.println("res = " + res); + return res; + } + + // backtrack + List cur = new ArrayList<>(); + //System.out.println("res = " + res); + this.getPermutation(nums, cur, res); + //System.out.println("(after) res = " + res); + return res; + } + + public void getPermutation(int[] nums, List cur, List> res){ + + if (cur.size() > nums.length){ + return; + } + + if (cur.size() == nums.length){ + if (!res.contains(cur)){ + res.add(new ArrayList<>(cur)); + } + } + + /** NOTE !!! NO NEED to use "start_idx" */ + for (int i = 0; i < nums.length; i++){ + /** NOTE !!! + * + * + * via "!cur.contains(nums[i])" to NOT use duplicated element in recursive call within for loop + */ + if (!cur.contains(nums[i])){ + cur.add(nums[i]); + this.getPermutation(nums, cur, res); + // undo + cur.remove(cur.size()-1); + } + } + } + + List> ans = new ArrayList<>(); + + // V0' + // IDEA : BACKTRACK + public List> permute_0_1(int[] nums) { + if (nums.length == 1){ List> _ans = new ArrayList<>(); List cur = new ArrayList<>(); diff --git a/leetcode_java/src/main/java/dev/workspace3.java b/leetcode_java/src/main/java/dev/workspace3.java index 1a1253b9..a67e12cf 100644 --- a/leetcode_java/src/main/java/dev/workspace3.java +++ b/leetcode_java/src/main/java/dev/workspace3.java @@ -4342,5 +4342,50 @@ public void getSubSet(int start_idx, int[] nums, List cur, List> permute(int[] nums) { + + List> res = new ArrayList<>(); + + if (nums.length == 1){ + List cur = new ArrayList<>(); + cur.add(nums[0]); + System.out.println("cur = " + cur); + res.add(cur); + System.out.println("res = " + res); + return res; + } + + // backtrack + List cur = new ArrayList<>(); + System.out.println("res = " + res); + this.getPermutation(nums, cur, res); + System.out.println("(after) res = " + res); + return res; + } + + public void getPermutation(int[] nums, List cur, List> res){ + + if (cur.size() > nums.length){ + return; + } + + if (cur.size() == nums.length){ + if (!res.contains(cur)){ + res.add(new ArrayList<>(cur)); + } + } + + for (int i = 0; i < nums.length; i++){ + if (!cur.contains(nums[i])){ + cur.add(nums[i]); + this.getPermutation(nums, cur, res); + // undo + cur.remove(cur.size()-1); + } + } + } + + }