题解 | #字符串的全部子序列#
字符串的全部子序列
https://www.nowcoder.com/practice/92e6247998294f2c933906fdedbc6e6a
public class Code01_Subsequences { public static String[] convert(Set<String> set) { String[] strArr = new String[set.size()]; int i = 0; for (String it : set) { strArr[i++] = it; } // 第2种方式 // String[] array = set.toArray(new String[set.size()]); return strArr; } // ================================== 解法2 ======================================= public static String[] generatePermutation(String str) { char[] charArray = str.toCharArray(); // 收集路径集合 Set<String> set = new HashSet<>(); /** * =============带路径递归============== */ f(charArray, new char[charArray.length], 0, 0, set); /** * =============结果返回============== */ return convert(set); } /** * 默认使用0开头,覆盖值 * * @param charArr * @param path * @param cur 当前值的charArr的索引 --》 当前要处理的字符 * @param size 控制覆盖的位置 (包含,还是不包含的索引覆盖位置) & 添加路径字符数组的数量 * @param set */ public static void f(char[] charArr, char[] path, int cur, int size, Set<String> set) { if (cur == charArr.length) { set.add(String.valueOf(path, 0, size)); } else { // 重置字符数组值 - 重复利用 // 根据size索引(是否添加上一层的字符) 来被 填充/覆盖 当前size索引值 path[size] = charArr[cur]; // 1.添加 - 节点 (size + 1代表添加了当前层的字符) f(charArr, path, cur + 1, size + 1, set); // 2.不添加 - 节点 (size 代表不添加了当前层的字符) f(charArr, path, cur + 1, size, set); } } }#小白算法成长之路#
算法-基础练习 文章被收录于专栏
bilibili - 左神的课程算法代码练习