我正在尝试使用Java中的递归计算给定字符串的所有可能排列。但是,我不知道我的代码有什么问题。
这是我的算法:
public static ArrayList<String> computeAllPossiblePermutations(String str)
{
ArrayList<String> perms = new ArrayList<>();
//base case
if (str.length() == 1)
perms.add(str);
else
{
//loop over the string
for (int i = 0; i < str.length() - 1; i++)
{
//make a subset of the string excluding the first char
String sub = str.substring(i+1, str.length());
//compute permutations of the subset
ArrayList<String> subPerms = computeAllPossiblePermutations(sub);
//add the first char that we excluded at the start of each permutations
for (String s : subPerms)
{
s = str.charAt(i) + s;
perms.add(s);
}
}
}
return perms;
}
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
有一些问题:
̶v̶a̶r̶ ̶p̶r̶o̶m̶i̶s̶e̶s̶A̶r̶r̶a̶y̶ ̶=̶ ̶[̶]̶;̶
var images, postObject;
var arrayPromise = files.readFile('images.txt')
.then(function (data) {
͟v͟a͟r͟ ͟p͟r͟o͟m͟i͟s͟e͟s͟A͟r͟r͟a͟y͟ ͟=͟ ͟[͟]͟;͟
images= angular.fromJson(data);
images.forEach(function (image, idx) {
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
if (!image.sent) {
var promise = files.readFile(image.name)
.then(function (data) {
postObject = angular.fromJson(data);
var url = EndPointsService.baseURL + "images"
͟r͟e͟t͟u͟r͟n͟ $resource(url).save(postObject).$promise;
});
promisesArray.push(promise);
};
});
͟r͟e͟t͟u͟r͟n͟ $q.all(promisesArray);
});
arrayPromise.then(function (dataArray) {
console.log(dataArray);
//Process data here
});
忽略第一个字符String sub = str.substring(i+1, str.length());
之后的任何内容视为&#34;块&#34;保持不变的子字符串,而为了生成排列,我们应该在字符串其余部分的任意两个字符之间插入当前(第一个)字符 - 并为每个排列执行此操作i
行在#2 这是一个建议的解决方法:
s = str.charAt(i) + s;