例:输入:[a,b,c]
输出:[[], [a], [a, b], [a, b, c], [a, c], [b], [b, c], [c]]
网上稍微查了一下,可能是查的方法不对,没找到对应的解法,于是只能自己来想。
考虑到输出格式,我决定直接做成二维数组输出
上代码(Java):
private static List<String> stringList = new LinkedList<>();
/**
* 递归方法
*/
private static List<String> test4(char[] ch, int p, StringBuilder prefix) {
// 需要控制台输出,解开此注释
// System.out.println(prefix);
// 将StringBuilder对象转换成String存入静态List
stringList.add(prefix.toString());
while (p < ch.length) {
// 使用StringBuilder对象拼接字符串
// 创建新的StringBuilder对象pre,防止递归结束时prefix被修改
StringBuilder pre = new StringBuilder();
// 将prefix的值和ch[q]的值拼接到pre
pre.append(prefix).append(ch[p]);
// 后移标记p
p++;
test4(ch, p, pre);
}
return stringList;
}
/**
* 包装方法
*/
public static char[][] charArray4(char[] ch) {
List<String> list = test4(ch, 0, new StringBuilder());
//创建二维数组并将List<String>转换为char[][]
char[][] result = new char[list.size()][ch.length];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i).toCharArray();
}
return result;
}
目前存在问题:为了减少String拼接的消耗而引入了StringBuilder,而new StringBuilder对象又增加了消耗,之后有时间再考虑修改。