diff --git a/src/leo/class11_17/PrintStr.java b/src/leo/class11_17/PrintStr.java index 50197b0..4f672d6 100644 --- a/src/leo/class11_17/PrintStr.java +++ b/src/leo/class11_17/PrintStr.java @@ -37,6 +37,52 @@ public class PrintStr { } + static class Subs1 { + public static List subs(String string) { + List list = new ArrayList<>(); + if (string.length() == 0 || string == null) { + return list; + } + char[] chars = string.toCharArray(); + String path = ""; + + p(chars,0,list,path); + return list; + } + + private static void p(char[] chars, int i, List list, String path) { + if (i == chars.length) { + list.add(path); + return; + } + p(chars, i + 1, list, path); + p(chars, i + 1, list, path+String.valueOf(chars[i])); + } + } + + static class Subs2 { + + public static List subs(String string) { + List list = new ArrayList<>(); + if (string.length() == 0 || string == null) { + return list; + } + char[] chars = string.toCharArray(); + String path = ""; + p(chars, 0, list, path); + return list; + } + + private static void p(char[] chars, int i, List list, String path) { + if (i == chars.length) { + list.add(path); + return; + } + p(chars, i + 1, list, path); + p(chars, i + 1, list, path + String.valueOf(chars[i])); + } + } + /** * 打印一个字符串的全部子序列,要求不要出现重复字面值的子序列 */ @@ -119,7 +165,7 @@ public class PrintStr { } public static void main(String[] args){ String str = "abcc"; - List subs = Subs.subs(str); + List subs = Subs2.subs(str); System.out.println(subs.toString()); List subNoRepeat = SubNoRepeat.subNoRepeat(str); System.out.println(subNoRepeat.toString()); diff --git a/src/leo/class11_17/ReverseStackUsingRecursive.java b/src/leo/class11_17/ReverseStackUsingRecursive.java index 5012459..3b38d38 100644 --- a/src/leo/class11_17/ReverseStackUsingRecursive.java +++ b/src/leo/class11_17/ReverseStackUsingRecursive.java @@ -35,13 +35,58 @@ public class ReverseStackUsingRecursive { } + static class Code1 { + public static void reverse(Stack stack) { + if (stack.isEmpty()) { + return; + } + Integer last = f(stack); + reverse(stack); + stack.push(last); + } + + private static int f(Stack stack) { + Integer value = stack.pop(); + if ((stack.isEmpty())) { + return value; + } + int f = f(stack); + stack.push(value); + return f; + } + } + + + static class Code2 { + public static void reverse(Stack stack) { + if (stack.isEmpty()) { + return; + } + int last = f(stack); + reverse(stack); + stack.push(last); + } + + private static int f(Stack stack) { + Integer value = stack.pop(); + if (stack.isEmpty()) { + return value; + } + int last = f(stack); + stack.push(value); + return last; + } + } + + + public static void main(String[] args){ Stack stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); - Code.reverse(stack); + Code2.reverse(stack); System.out.println(stack); }