modify code structure

pull/6/head
左程云 5 years ago
parent 6041ac97e1
commit de2e3f6fb0

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01; package class01;
public class Code06_BSAwesome { public class Code06_BSAwesome {

@ -1,4 +1,4 @@
package class01_02; package class02;
public class Code01_Swap { public class Code01_Swap {

@ -1,4 +1,4 @@
package class01_02; package class02;
public class Code02_EvenTimesOddTimes { public class Code02_EvenTimesOddTimes {

@ -1,4 +1,4 @@
package class01_02; package class02;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package class02_03; package class03;
public class Code02_DeleteGivenValue { public class Code02_DeleteGivenValue {

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;

@ -1,4 +1,4 @@
package class02_03; package class03;
public class Code04_RingArray { public class Code04_RingArray {

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;

@ -1,4 +1,4 @@
package class02_03; package class03;
public class Code08_GetMax { public class Code08_GetMax {

@ -1,4 +1,4 @@
package class02_03; package class03;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class03_04; package class04;
public class Code01_MergeSort { public class Code01_MergeSort {

@ -1,4 +1,4 @@
package class03_04; package class04;
public class Code02_SmallSum { public class Code02_SmallSum {

@ -1,4 +1,4 @@
package class03_04; package class04;
public class Code03_ReversePair { public class Code03_ReversePair {

@ -1,4 +1,4 @@
package class03_04; package class04;
public class Code04_BiggerThanRightTwice { public class Code04_BiggerThanRightTwice {

@ -1,4 +1,4 @@
package class03_05; package class05;
// 这道题直接在leetcode测评 // 这道题直接在leetcode测评
// https://leetcode.com/problems/count-of-range-sum/ // https://leetcode.com/problems/count-of-range-sum/

@ -1,4 +1,4 @@
package class03_05; package class05;
public class Code02_PartitionAndQuickSort { public class Code02_PartitionAndQuickSort {

@ -1,4 +1,4 @@
package class03_05; package class05;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package class04_06; package class06;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class04_06; package class06;
import java.util.Comparator; import java.util.Comparator;
import java.util.PriorityQueue; import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_06; package class06;
import java.util.Arrays; import java.util.Arrays;
import java.util.PriorityQueue; import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_06; package class06;
import java.util.Arrays; import java.util.Arrays;
import java.util.PriorityQueue; import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_07; package class07;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07; package class07;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07; package class07;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07; package class07;
public class Inner<T> { public class Inner<T> {
public T value; public T value;

@ -1,4 +1,4 @@
package class05_08; package class08;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class05_08; package class08;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class05_08; package class08;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class05_08; package class08;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package class06_09; package class09;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class06_09; package class09;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package class06_09; package class09;
public class Code03_SmallerEqualBigger { public class Code03_SmallerEqualBigger {

@ -1,4 +1,4 @@
package class06_09; package class09;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class06_10; package class10;
public class Code01_FindFirstIntersectNode { public class Code01_FindFirstIntersectNode {

@ -1,6 +1,6 @@
package class07_10; package class10;
public class Code01_RecursiveTraversalBT { public class Code02_RecursiveTraversalBT {
public static class Node { public static class Node {
public int value; public int value;

@ -1,8 +1,8 @@
package class07_10; package class10;
import java.util.Stack; import java.util.Stack;
public class Code02_UnRecursiveTraversalBT { public class Code03_UnRecursiveTraversalBT {
public static class Node { public static class Node {
public int value; public int value;

@ -1,4 +1,4 @@
package class07_11; package class11;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;

@ -1,4 +1,4 @@
package class07_11; package class11;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;

@ -1,4 +1,4 @@
package class07_11; package class11;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package class07_11; package class11;
public class Code04_PrintBinaryTree { public class Code04_PrintBinaryTree {

@ -1,4 +1,4 @@
package class07_11; package class11;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;

@ -1,4 +1,4 @@
package class07_11; package class11;
public class Code06_SuccessorNode { public class Code06_SuccessorNode {

@ -1,4 +1,4 @@
package class07_11; package class11;
public class Code07_PaperFolding { public class Code07_PaperFolding {

@ -1,88 +0,0 @@
package class11_17;
import java.util.ArrayList;
import java.util.List;
public class Code03_PrintAllPermutations {
public static ArrayList<String> permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0) {
return res;
}
char[] chs = str.toCharArray();
process(chs, 0, res);
return res;
}
// str[0..i-1]已经做好决定的
// str[i...]都有机会来到i位置
// i终止位置str当前的样子就是一种结果 -> ans
public static void process(char[] str, int i, ArrayList<String> ans) {
if (i == str.length) {
ans.add(String.valueOf(str));
}
// 如果i没有终止i... 都可以来到i位置
for (int j = i; j < str.length; j++) { // j i后面所有的字符都有机会
swap(str, i, j);
process(str, i + 1, ans);
swap(str, i, j);
}
}
public static ArrayList<String> permutationNoRepeat(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0) {
return res;
}
char[] chs = str.toCharArray();
process2(chs, 0, res);
return res;
}
// str[0..i-1]已经做好决定的
// str[i...]都有机会来到i位置
// i终止位置str当前的样子就是一种结果 -> ans
public static void process2(char[] str, int i, ArrayList<String> res) {
if (i == str.length) {
res.add(String.valueOf(str));
return;
}
boolean[] visit = new boolean[26]; // visit[0 1 .. 25]
for (int j = i; j < str.length; j++) {
// str[j] = 'a' -> 0 visit[0] -> 'a'
// str[j] = 'z' -> 25 visit[25] -> 'z'
if (!visit[str[j] - 'a']) {
visit[str[j] - 'a'] = true;
swap(str, i, j);
process2(str, i + 1, res);
swap(str, i, j);
}
}
}
public static void swap(char[] chs, int i, int j) {
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
public static void main(String[] args) {
String s = "aac";
List<String> ans1 = permutation(s);
for (String str : ans1) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans2 = permutationNoRepeat(s);
for (String str : ans2) {
System.out.println(str);
}
}
}

@ -1,79 +0,0 @@
package class11_17;
public class Code07_Knapsack {
public static int getMaxValue(int[] w, int[] v, int bag) {
return process(w, v, 0, 0, bag);
}
// 不变 w[] v[] bag
// index... 最大价值
// 0..index-1上做了货物的选择使得你已经达到的重量是多少alreadyW
// 如果返回-1认为没有方案
// 如果不返回-1认为返回的值是真实价值
public static int process(int[] w, int[] v, int index, int alreadyW, int bag) {
if (alreadyW > bag) {
return -1;
}
// 重量没超
if (index == w.length) {
return 0;
}
int p1 = process(w, v, index + 1, alreadyW, bag);
int p2next = process(w, v, index + 1, alreadyW + w[index], bag);
int p2 = -1;
if (p2next != -1) {
p2 = v[index] + p2next;
}
return Math.max(p1, p2);
}
public static int maxValue(int[] w, int[] v, int bag) {
return process(w, v, 0, bag);
}
// 只剩下rest的空间了
// index...货物自由选择但是剩余空间不要小于0
// 返回 index...货物能够获得的最大价值
public static int process(int[] w, int[] v, int index, int rest) {
if (rest < 0) { // base case 1
return -1;
}
// rest >=0
if (index == w.length) { // base case 2
return 0;
}
// 有货也有空间
int p1 = process(w, v, index + 1, rest);
int p2 = -1;
int p2Next = process(w, v, index + 1, rest - w[index]);
if(p2Next!=-1) {
p2 = v[index] + p2Next;
}
return Math.max(p1, p2);
}
public static int dpWay(int[] w, int[] v, int bag) {
int N = w.length;
int[][] dp = new int[N + 1][bag + 1];
for (int index = N - 1; index >= 0; index--) {
for (int rest = 1; rest <= bag; rest++) {
dp[index][rest] = dp[index + 1][rest];
if (rest >= w[index]) {
dp[index][rest] = Math.max(dp[index][rest], v[index] + dp[index + 1][rest - w[index]]);
}
}
}
return dp[0][bag];
}
public static void main(String[] args) {
int[] weights = { 3, 2, 4, 7 };
int[] values = { 5, 6, 3, 19 };
int bag = 11;
System.out.println(maxValue(weights, values, bag));
System.out.println(dpWay(weights, values, bag));
}
}

@ -1,82 +0,0 @@
package class11_17;
public class Code08_CardsInLine {
public static int win1(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
return Math.max(
f(arr, 0, arr.length - 1),
s(arr, 0, arr.length - 1)
);
}
// L....R
// F S L+1..R
// L..R-1
public static int f(int[] arr, int L, int R) {
if (L == R) {
return arr[L];
}
return Math.max(
arr[L] + s(arr, L + 1, R),
arr[R] + s(arr, L, R - 1)
);
}
// arr[L..R]
public static int s(int[] arr, int L, int R) {
if (L == R) {
return 0;
}
return Math.min(
f(arr, L + 1, R), // arr[i]
f(arr, L, R - 1) // arr[j]
);
}
public static int win2(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int N = arr.length;
int[][] f = new int[N][N];
int[][] s = new int[N][N];
for(int i = 0; i < N;i++) {
f[i][i] = arr[i];
}
// s[i][i] = 0;
for(int i = 1; i < N;i++) {
int L =0;
int R =i;
while(L < N && R < N) {
f[L][R] = Math.max(
arr[L] + s[L + 1][ R],
arr[R] + s[L][R - 1]
);
s[L][R] = Math.min(
f[L + 1][R], // arr[i]
f[L][R - 1] // arr[j]
);
L++;
R++;
}
}
return Math.max(f[0][N-1], s[0][N-1]);
}
public static void main(String[] args) {
int[] arr = { 4,7,9,5,19,29,80,4 };
// A 4 9
// B 7 5
System.out.println(win1(arr));
System.out.println(win2(arr));
}
}

@ -1,4 +1,4 @@
package class08_12; package class12;
import java.util.LinkedList; import java.util.LinkedList;

@ -1,4 +1,4 @@
package class08_12; package class12;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_12; package class12;
public class Code03_IsBalanced { public class Code03_IsBalanced {

@ -1,4 +1,4 @@
package class08_12; package class12;
public class Code04_IsFull { public class Code04_IsFull {

@ -1,4 +1,4 @@
package class08_12; package class12;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_12; package class12;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class08_13; package class13;
import java.util.LinkedList; import java.util.LinkedList;

@ -1,4 +1,4 @@
package class08_13; package class13;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_13; package class13;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class08_13; package class13;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,10 +1,10 @@
package class09_13; package class13;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.TreeSet; import java.util.TreeSet;
public class Code01_LowestLexicography { public class Code05_LowestLexicography {
public static String lowestString1(String[] strs) { public static String lowestString1(String[] strs) {
if (strs == null || strs.length == 0) { if (strs == null || strs.length == 0) {

@ -1,4 +1,4 @@
package class09_14; package class14;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class09_14; package class14;
import java.util.PriorityQueue; import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class09_14; package class14;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class09_14; package class14;
import java.util.Comparator; import java.util.Comparator;
import java.util.PriorityQueue; import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class09_14; package class14;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package class09_15; package class15;
// 本题为leetcode原题 // 本题为leetcode原题
// 测试链接https://leetcode.com/problems/friend-circles/ // 测试链接https://leetcode.com/problems/friend-circles/

@ -1,4 +1,4 @@
package class09_15; package class15;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class09_15; package class15;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.HashSet; import java.util.HashSet;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16; package class16;
public class Edge { public class Edge {
public int weight; public int weight;

@ -1,4 +1,4 @@
package class10_16; package class16;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16; package class16;
public class GraphGenerator { public class GraphGenerator {

@ -1,4 +1,4 @@
package class10_17; package class16;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class10_17; package class17;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -55,12 +55,13 @@ public class Code01_Dijkstra {
} }
public static class NodeHeap { public static class NodeHeap {
private Node[] nodes; // 实际的堆结构 // 堆!
// key 某一个node value 上面堆中的位置 private Node[] nodes;
// node -> 堆上的什么位置?
private HashMap<Node, Integer> heapIndexMap; private HashMap<Node, Integer> heapIndexMap;
// key 某一个节点, value 从源节点出发到该节点的目前最小距离
private HashMap<Node, Integer> distanceMap; private HashMap<Node, Integer> distanceMap;
private int size; // 堆上有多少个点 private int size;
public NodeHeap(int size) { public NodeHeap(int size) {
nodes = new Node[size]; nodes = new Node[size];
@ -76,21 +77,22 @@ public class Code01_Dijkstra {
// 有一个点叫node现在发现了一个从源节点出发到达node的距离为distance // 有一个点叫node现在发现了一个从源节点出发到达node的距离为distance
// 判断要不要更新,如果需要的话,就更新 // 判断要不要更新,如果需要的话,就更新
public void addOrUpdateOrIgnore(Node node, int distance) { public void addOrUpdateOrIgnore(Node node, int distance) {
if (inHeap(node)) { if (inHeap(node)) { // update
distanceMap.put(node, Math.min(distanceMap.get(node), distance)); distanceMap.put(node, Math.min(distanceMap.get(node), distance));
insertHeapify(node, heapIndexMap.get(node)); insertHeapify(node, heapIndexMap.get(node));
} }
if (!isEntered(node)) { if (!isEntered(node)) { // add
nodes[size] = node; nodes[size] = node;
heapIndexMap.put(node, size); heapIndexMap.put(node, size);
distanceMap.put(node, distance); distanceMap.put(node, distance);
insertHeapify(node, size++); insertHeapify(node, size++);
} }
// ignore
} }
public NodeRecord pop() { public NodeRecord pop() {
NodeRecord nodeRecord = new NodeRecord(nodes[0], distanceMap.get(nodes[0])); NodeRecord nodeRecord = new NodeRecord(nodes[0], distanceMap.get(nodes[0]));
swap(0, size - 1); swap(0, size - 1); // 0 > size - 1 size - 1 > 0
heapIndexMap.put(nodes[size - 1], -1); heapIndexMap.put(nodes[size - 1], -1);
distanceMap.remove(nodes[size - 1]); distanceMap.remove(nodes[size - 1]);
// free C++同学还要把原本堆顶节点析构对java同学不必 // free C++同学还要把原本堆顶节点析构对java同学不必

@ -1,8 +1,8 @@
package class11_17; package class17;
import java.util.Stack; import java.util.Stack;
public class Code01_Hanoi { public class Code02_Hanoi {
public static void hanoi1(int n) { public static void hanoi1(int n) {
leftToRight(n); leftToRight(n);
@ -10,7 +10,7 @@ public class Code01_Hanoi {
// 请把1~N层圆盘 从左 -> 右 // 请把1~N层圆盘 从左 -> 右
public static void leftToRight(int n) { public static void leftToRight(int n) {
if (n == 1) { if (n == 1) { // base case
System.out.println("Move 1 from left to right"); System.out.println("Move 1 from left to right");
return; return;
} }
@ -76,7 +76,6 @@ public class Code01_Hanoi {
} }
} }
// 1~i 圆盘 目标是from -> to other是另外一个
public static void func(int N, String from, String to, String other) { public static void func(int N, String from, String to, String other) {
if (N == 1) { // base if (N == 1) { // base
System.out.println("Move 1 from " + from + " to " + to); System.out.println("Move 1 from " + from + " to " + to);
@ -133,8 +132,8 @@ public class Code01_Hanoi {
hanoi1(n); hanoi1(n);
System.out.println("============"); System.out.println("============");
hanoi2(n); hanoi2(n);
System.out.println("============"); // System.out.println("============");
hanoi3(n); // hanoi3(n);
} }
} }

@ -1,11 +1,12 @@
package class11_17; package class17;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
public class Code02_PrintAllSubsquences { public class Code03_PrintAllSubsquences {
// s -> "abc" ->
public static List<String> subs(String s) { public static List<String> subs(String s) {
char[] str = s.toCharArray(); char[] str = s.toCharArray();
String path = ""; String path = "";
@ -14,19 +15,21 @@ public class Code02_PrintAllSubsquences {
return ans; return ans;
} }
// str固定不变 // str 固定参数
// index此时来到的位置, 要 or 不要 // 来到了str[index]字符index是位置
// 如果index来到了str中的终止位置把沿途路径所形成的答案放入ans中 // str[0..index-1]已经走过了之前的决定都在path上
// 之前做出的选择就是path // 之前的决定已经不能改变了就是path
// str[index....]还能决定,之前已经确定,而后面还能自由选择的话,
// 把所有生成的子序列放入到ans里去
public static void process1(char[] str, int index, List<String> ans, String path) { public static void process1(char[] str, int index, List<String> ans, String path) {
if (index == str.length) { if (index == str.length) {
ans.add(path); ans.add(path);
return; return;
} }
String no = path; // 没有要index位置的字符
process1(str, index + 1, ans, no); process1(str, index + 1, ans, path);
String yes = path + String.valueOf(str[index]); // 要了index位置的字符
process1(str, index + 1, ans, yes); process1(str, index + 1, ans, path + String.valueOf(str[index]));
} }
public static List<String> subsNoRepeat(String s) { public static List<String> subsNoRepeat(String s) {
@ -41,9 +44,7 @@ public class Code02_PrintAllSubsquences {
return ans; return ans;
} }
// str index set public static void process2(char[] str, int index, HashSet<String> set, String path) {
public static void process2(char[] str, int index,
HashSet<String> set, String path) {
if (index == str.length) { if (index == str.length) {
set.add(path); set.add(path);
return; return;
@ -55,7 +56,7 @@ public class Code02_PrintAllSubsquences {
} }
public static void main(String[] args) { public static void main(String[] args) {
String test = "aacc"; String test = "acccc";
List<String> ans1 = subs(test); List<String> ans1 = subs(test);
List<String> ans2 = subsNoRepeat(test); List<String> ans2 = subsNoRepeat(test);

@ -0,0 +1,110 @@
package class17;
import java.util.ArrayList;
import java.util.List;
public class Code04_PrintAllPermutations {
public static List<String> permutation1(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
ArrayList<Character> rest = new ArrayList<Character>();
for (char cha : str) {
rest.add(cha);
}
String path = "";
f(rest, path, ans);
return ans;
}
public static void f(ArrayList<Character> rest, String path, List<String> ans) {
if (rest.isEmpty()) {
ans.add(path);
} else {
int N = rest.size();
for (int i = 0; i < N; i++) {
char cur = rest.get(i);
rest.remove(i);
f(rest, path + cur, ans);
rest.add(i, cur);
}
}
}
public static List<String> permutation2(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
g1(str, 0, ans);
return ans;
}
public static void g1(char[] str, int index, List<String> ans) {
if (index == str.length) {
ans.add(String.valueOf(str));
} else {
for (int i = index; i < str.length; i++) {
swap(str, index, i);
g1(str, index + 1, ans);
swap(str, index, i);
}
}
}
public static List<String> permutation3(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
g2(str, 0, ans);
return ans;
}
public static void g2(char[] str, int index, List<String> ans) {
if (index == str.length) {
ans.add(String.valueOf(str));
} else {
boolean[] visited = new boolean[256];
for (int i = index; i < str.length; i++) {
if (!visited[str[i]]) {
visited[str[i]] = true;
swap(str, index, i);
g2(str, index + 1, ans);
swap(str, index, i);
}
}
}
}
public static void swap(char[] chs, int i, int j) {
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
public static void main(String[] args) {
String s = "acc";
List<String> ans1 = permutation1(s);
for (String str : ans1) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans2 = permutation2(s);
for (String str : ans2) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans3 = permutation3(s);
for (String str : ans3) {
System.out.println(str);
}
}
}

@ -1,8 +1,8 @@
package class11_17; package class17;
import java.util.Stack; import java.util.Stack;
public class Code04_ReverseStackUsingRecursive { public class Code05_ReverseStackUsingRecursive {
public static void reverse(Stack<Integer> stack) { public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) { if (stack.isEmpty()) {
@ -13,6 +13,9 @@ public class Code04_ReverseStackUsingRecursive {
stack.push(i); stack.push(i);
} }
// 栈底元素移除掉
// 上面的元素盖下来
// 返回移除掉的栈底元素
public static int f(Stack<Integer> stack) { public static int f(Stack<Integer> stack) {
int result = stack.pop(); int result = stack.pop();
if (stack.isEmpty()) { if (stack.isEmpty()) {

@ -1,4 +1,4 @@
package class10_17; package class17;
public class Edge { public class Edge {
public int weight; public int weight;

@ -1,4 +1,4 @@
package class10_17; package class17;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16; package class17;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package class12; package class18;
public class Code01_RobotWalk { public class Code01_RobotWalk {

@ -1,4 +1,4 @@
package class12; package class18;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;

@ -1,4 +1,4 @@
package class12; package class18;
public class Code03_Knapsack { public class Code03_Knapsack {

@ -1,4 +1,4 @@
package class12; package class18;
public class Code04_CardsInLine { public class Code04_CardsInLine {

@ -1,6 +1,6 @@
package class11_17; package class18;
public class Code06_ConvertToLetterString { public class Code05_ConvertToLetterString {
public static int number(String str) { public static int number(String str) {
if (str == null || str.length() == 0) { if (str == null || str.length() == 0) {
@ -13,7 +13,7 @@ public class Code06_ConvertToLetterString {
// i之前的位置如何转化已经做过决定了, 不用再关心 // i之前的位置如何转化已经做过决定了, 不用再关心
// i... 有多少种转化的结果 // i... 有多少种转化的结果
public static int process(char[] str, int i) { public static int process(char[] str, int i) {
if (i == str.length) { // base case if (i == str.length) {
return 1; return 1;
} }
if (str[i] == '0') { if (str[i] == '0') {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save