【问题标题】:Creating an Iterative - Javascipt创建迭代 - Javascript
【发布时间】:2021-02-12 10:09:00
【问题描述】:

我在下面有一个递归函数,我只是想知道如何为同一件事创建一个迭代(即没有递归的循环)。非常感谢任何帮助或建议谢谢!

function countPalindromes(string, count) {
  if (string.length <= 1) {
    return count;
  }

  let [ firstLetter ] = string;
  let lastLetter = string[string.length - 1];

  if (firstLetter === lastLetter) {
    let stringWithoutFirstAndLastLetters = string.substring(1, string.length - 1);
    return countPalindromes(stringWithoutFirstAndLastLetters, count + 1);
  } else {
    return count;
  }
}

console.log(countPalindromes("level", 0));
console.log(countPalindromes("aya", 0));

【问题讨论】:

    标签: javascript function recursion iteration


    【解决方案1】:

    你可以这样做:

    function countPalindromes(string) {
      let count = 0;
      for (let i = 0; i < Math.floor(string.length / 2); i++) {
        const letterFromTheStart = string[i];
        const letterFromTheEnd = string[(string.length - 1) - i];
        if (letterFromTheStart !== letterFromTheEnd) {
          break;
        }
        count++;
      }
      return count;
    }
    
    console.log(countPalindromes("level"));
    console.log(countPalindromes("aya"));

    重要的部分是i &lt; Math.floor(string.length / 2)和(string.length - 1) - i。

    第一个确保循环在字符串的一半之前或一半处停止,第二个获取从字符串末尾开始的nth 字符。

    【讨论】:

    • @28space_junkiee 是的,for 循环使它可以迭代。
    【解决方案2】:

    花了我一段时间,但这应该可行。

    function countPalindromes(string, count) {
      for (i = 0; i < Math.floor(string.length/2); i++) {
        if (string.charAt(i) === string.charAt(string.length - i-1)) {count++};
      }
      return count;
    }
    
    console.log(countPalindromes("level", 0));
    console.log(countPalindromes("aya", 0));

    【讨论】:

      【解决方案3】:

      您可以反转字符串并比较字母,直到遇到不匹配,返回匹配的最后一个索引加一。

      function isPalindrome(word) {
        const drow = word.split('').reverse();
        
        for (i = 0; i < drow.length && drow[i] === word[i]; i++);
        
        return i;
      }
      
      console.log(isPalindrome("level"));

      【讨论】:

        【解决方案4】:

        我没有得到你的递归回文函数。只是将递归的转换为迭代的。

         function countPalindromes(string, count) {
                if (string.length <= 1) {
                    return count;
                }
                let i = 0, j = string.length-1;
                for (; i < j && string[i] == string[j]; i++, j--);
                return i;
            }
            
            console.log(countPalindromes("level", 0));
            console.log(countPalindromes("aya", 0));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          • 2015-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多