再帰手続きは一番難しいです。
1521 ワード
テーマの説明
文字列を入力し、文字列のすべての配列を辞書順に印刷します。例えば文字列a b cを入力すると、文字a,b,cによって並べられるすべての文字列abc,acb,bac,bca,cabおよびcbaがプリントされる。結果はアルファベット順に出力してください。
コードは以下の通りです。javaは相変わらずです。
文字列を入力し、文字列のすべての配列を辞書順に印刷します。例えば文字列a b cを入力すると、文字a,b,cによって並べられるすべての文字列abc,acb,bac,bca,cabおよびcbaがプリントされる。結果はアルファベット順に出力してください。
コードは以下の通りです。javaは相変わらずです。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
public class Solution {
HashSet arrangeSet = new HashSet<>();
public void DfsStr(char str[],char sequence[],int step,int strLen,boolean moveFlag[])
{
if(step == strLen)
{
String arrange = new String(sequence);
arrangeSet.add(arrange);
return;
}
for(int i = 0; i < strLen; i++)
{
if(moveFlag[i] == false)
{
sequence[step] = str[i];
moveFlag[i] = true;
DfsStr(str, sequence, step + 1, strLen, moveFlag);
moveFlag[i] = false; //
}
}
}
public ArrayList Permutation(String str)
{
char sequence[] = new char[str.length()];
boolean moveFlag[] = new boolean[str.length()];
char strArrary[] = str.toCharArray();
ArrayList stringList = new ArrayList<>();
if(str == null || str.isEmpty())
{
return stringList;
}
for(int i = 0; i < str.length(); i++)
{
moveFlag[i] = false;
}
DfsStr(strArrary, sequence, 0, str.length(), moveFlag);
stringList.addAll(arrangeSet);
Collections.sort(stringList);
return stringList;
}
}