繁体   English   中英

排列算法打印出部分错误消息

[英]Permutations algorithm prints out parts of error message

我正在尝试制作置换算法。 由于某种原因,它会返回部分错误消息,但我不明白为什么以及如何停止它。 当我添加其他if语句时,问题消失了,但我想知道为什么。 `

function permutations(string) {
  var result = [ ];

  if ( string.length === 0) {
    var error = "nothing to output"; // for some reason it puts one letter into the array
    return error;
  } else if (string.length === 1) { //this loop somehow fixes it?
    return string;
  } else {
    for (var i = 0; i < string.length; i++) {
      var firstChar = string[i];
      var otherChar = string.substring(0, i) + string.substring(i + 1);
      var otherPermutations = permutations(otherChar);

      for (var j = 0; j < otherPermutations.length; j++) {
        result.push(firstChar + otherPermutations[j]);
      }
    }
    return result;
  }
}

console.log(permutations("abc"));
//prints ["abc", "acb", "bac", "bca", "cab", "cba"] when I add extra loop.
//when I remove extra else if, it prints (102) ["abcn", "abco", "abct", "abch", "abci", "abcn", "abcg", "abc ", "abct", "abco", "abc ", "abco", "abcu", "abct", "abcp", "abcu", "abct", "acbn", "acbo", "acbt", "acbh", "acbi", "acbn", "acbg", "acb ", "acbt", "acbo", "acb ", "acbo", "acbu", "acbt", "acbp", "acbu", "acbt", "bacn", "baco", "bact", "bach", "baci", "bacn", "bacg", "bac ", "bact", "baco", "bac ", "baco", "bacu", "bact", "bacp", "bacu", "bact", "bcan", "bcao", "bcat", "bcah", "bcai", "bcan", "bcag", "bca ", "bcat", "bcao", "bca ", "bcao", "bcau", "bcat", "bcap", "bcau", "bcat", "cabn", "cabo", "cabt", "cabh", "cabi", "cabn", "cabg", "cab ", "cabt", "cabo", "cab ", "cabo", "cabu", "cabt", "cabp", "cabu", "cabt", "cban", "cbao", "cbat", "cbah", "cbai", "cban", "cbag", "cba ", "cbat", "cbao", "cba ", "cbao", "cbau", "cbat", "cbap", …]`

由于某种原因,它返回部分错误消息,但我不明白为什么

那是因为您的错误消息成为了调用者中的otherPermutations ,并且遍历了其元素(它确实期望有一个数组...)。 不要return错误, throw它们throw

如何停止呢?

您已经找到了一种方法,它是字符串长度1的基本情况(尽管最好返回一个数组)。 但是实际上,空字符串应该是您的基本情况:结果应该是一个包含正好一个空字符串的数组。

function permutations(string) {
  var result = [];

  if (string.length === 0) {
    result.push("");
  // } else if (string.length === 1) { // not necessary
  //  result.push(string);
  } else {
    for (var i = 0; i < string.length; i++) {
      var firstChar = string[i];
      var otherChars = string.slice(0, i) + string.slice(i + 1);
      var otherPermutations = permutations(otherChars);

      for (var j = 0; j < otherPermutations.length; j++) {
        result.push(firstChar + otherPermutations[j]);
      }
    }
  }
  return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM