题目
如题,假设给出字符串“abc”,则要求输出“a”,“b”,“c”这三个字符的任意可能组合结果。
思路和代码
一开始做最开始想到的是最傻的全循环,耗时耗力,pass;
然后开始想用递归的方法做,参考了一下之后,自己写的java代码如下:
import java.util.ArrayList;
import java.util.List;
public class test {
static String string = "abcde";
static char[] chars = string.toCharArray();
private static void Add1More(List<Integer> list){
sout(list);
for(int i = 0;i < chars.length;i++){
if(!list.contains(i)){
List<Integer> temp = new ArrayList<>(list);
temp.add(i);
Add1More(temp);
}
}
}
private static void sout(List<Integer> list){
if(list.size() == chars.length){
for (int i =0;i < list.size();i++) {
Integer n =list.get(i);
System.out.print(chars[n] + "");
}
System.out.println();
}
}
public static void main(String[] args) {
for(int i = 0;i < chars.length;i++){
List<Integer> list = new ArrayList<>();
list.add(i);
Add1More(list);
}
}
}
然后想用python写一个出来,但是失败了(我的版本是3.6.5),主要是因为在python里一旦把一个list1赋值给list2,那么对list1和list2中任一个进行操作,两个list会同步,感觉可以试一下用字典做?但是今天太困了就下次试试好了。
anyway代码如下:
def AddOne(list):
sout(list)
for i in range(len(List)):
if List[i] not in list:
tmp = list
tmp.append(List[i])
AddOne(tmp)
def sout(list):
print(''.join(list))
if __name__ == "__main__":
String = 'abcde'
List = list(String)
for q in List:
temp = []
temp.append(q)
AddOne(temp)