递归地计算字符串Java的所有可能的排列

时间:2017-09-17 04:09:07

标签: java recursion permutation

我正在尝试使用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;
}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

有一些问题:

  1. 以下行:̶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 }); 忽略第一个字符
  2. 同一行也将索引String sub = str.substring(i+1, str.length());之后的任何内容视为&#34;块&#34;保持不变的子字符串,而为了生成排列,我们应该在字符串其余部分的任意两个字符之间插入当前(第一个)字符 - 并为每个排列执行此操作
  3. i行在#2
  4. 中重复同样的错误

    这是一个建议的解决方法:

    s = str.charAt(i) + s;