我试图在给定整数的字符串的java中进行排列。
所以如果String是" abc"整数是2。
我想要以下结果:
AB AC BA 公元前 CA CB
如果字符串也是" abc"但整数是3,我想得到以下结果:
ABC BAC CBA BCA 出租车 ACB
我已经有以下方法:
private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0) permutationsList.add(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
}
}
但这仅适用于整数等于字符串大小,在本例中为3。
通过Integer参数,有什么能帮助我完成这项工作吗?
提前多多谢谢;)
答案 0 :(得分:1)
对数据集进行排列的最佳方法之一是应用DFS,它有助于完成指定长度的所有组合。
以下是我的问题解决方案:
import java.util.ArrayList;
import java.util.List;
/**
* @author mifmif
*
*/
public class DFS {
/**
* list of generated combination
*/
List<String> permutations = new ArrayList<String>();
/**
* input used to generate combination
*/
String input = "ABCDEF";
/**
* the length of the combination
*/
int conbinationSize = 3;
/**
* isChoosed[i] is true if the combination that is currently prepared
* contain index.charAt(i)
*/
boolean[] isChoosed = new boolean[input.length()];
/**
* the DFS method that will generate all possible combination
*
* @param partialOutput
*/
public void generateCombination(String partialOutput) {
if (partialOutput.length() == conbinationSize) {
permutations.add(partialOutput);
return;
}
for (int i = 0; i < input.length(); ++i) {
if (!isChoosed[i]) {
isChoosed[i] = true;
generateCombination(partialOutput + input.charAt(i));
isChoosed[i] = false;
}
}
}
void printCombination() {
for (String c : permutations) {
System.out.println(c);
}
}
public static void main(String[] args) {
DFS dfs = new DFS();
dfs.generateCombination("");
dfs.printCombination();
}
}
答案 1 :(得分:0)
从IDE /编辑器中退一步,考虑如何在更高级别的伪代码中解决此问题。
如果字符串的长度为零或整数k
为零,会发生什么?
如果k
等于字符串的长度,你如何得到排列?如果您的字符串为'ABC'
,则可以通过查找'A'
的所有排列并将其中的每一个附加到字母'BC'
来获得从'A'
开始的所有排列。那么现在发生了什么,以便从'ABC'
和'B'
开始获得'C'
的排列?
最后,如果k
小于字符串的长度,请问自己在何种步骤停止该过程。
一些伪代码:
perms(string, k)
if length(string) == 0 or k == 0
// do what?
else
for every character in string
for every sub-permutation in perms(*some modified string*, *some modified k-value*)
// the permutation is character + sub-permutation