練習問題:文字列内の文字の任意の組合せを出力する

1840 ワード

タイトル
問題のように、文字列「abc」が与えられると仮定すると、「a」、「b」、「c」の3文字の任意の可能な組合せ結果を出力する必要がある.
構想とコード
最初に考えたのは最も愚かな全循環で、時間と労力を費やして、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 list){
        sout(list);
        for(int i = 0;i < chars.length;i++){
            if(!list.contains(i)){
                List temp = new ArrayList<>(list);
                temp.add(i);
                Add1More(temp);
            }
        }
    }

    private static void sout(List 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 list = new ArrayList<>();
            list.add(i);
            Add1More(list);
        }
    }
}

そしてpythonで1つ書こうとしたが失敗した(私のバージョンは3.6.5).主にpythonでリストt 1をリストt 2に割り当てると、リストt 1とリストt 2のいずれかを操作し、2つのリストが同期するので、辞書でやってみてもいいような気がしますか?でも、今日は眠くて次回やってみました.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)