为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2021-08-20 18:35:58
我正在尝试制作一个置换算法。出于某种原因,它返回部分错误消息,我不明白为什么以及如何停止它。当我添加另一个 else 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", …]`
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

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


那是因为您的错误消息otherPermutations在调用者中变成了,并且它迭代了它的元素(它确实期望一个数组......)。不要return错误,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;

}


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信