私は今週Javaの割り当てを行います。ここでは、文字列をバックトラックするためにセットを使用し、その文字列のすべての順列を見つけることが期待されています。文字列に含まれる数字。この部分だけで大丈夫です。問題は、この整数の長さをint zに設定すると予想されることです。intの文字列の並べ替え
たとえば、maxDigit( "12345"、3)メソッドの予想される出力は、次のようになります。コードを改善するために必要な箇所を教えてください。
乾杯。
/**
* Returns the maximum possible integer given the string str containing digits, using
* maximum of n digits. Each digit in str can only be used once.
**/
static int maxDigit(String str, int z) {
Set<Integer> result = new TreeSet<>();
if(str.length() == 0 || z == 0)
return -1;
permute("",str,result,z);
int answer = 0;
for(int a : result) {
if(a > answer)
answer = a;
}
return answer;
}
/**
* Creates a set of permutations in result based on string str with max n digits.
**/
private static void permute(String acc, String str,Set<Integer> result,int z) {
int n = str.length();
if (n == 0)
result.add(Integer.parseInt(acc));
else {
if(!(z < str.length())) {
for (int i = 0; i < n; i++)
permute(acc + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n), result, z);
} else {
for (int i = 0; i < n - 1; i++)
permute(acc + str.charAt(i), str.substring(0, i) + str.substring(i + 1, z), result, z);
}
}
}
これはあなたの質問に答えることはできませんが、文字列内の数字を降順でソートして最初の「z」数字を取っても最大の数字にならないことは知っていますか?これはO(nlogn) –
@RicoKhlerです。確かにそうですが、これは特にJavaのバックトラックの知識をテストするために設計されているため、この例ではStringをソートすることは不可能です。 – Neuw