LeetCode《初级算法》字符串之外观数列 -- JavaScript

82 阅读1分钟

题目

题目链接:leetcode-cn.com/leetbook/re…

image.png

题解

这种题目认真看题,按题目要求解答就行;

1、双层循环遍历求解

重点在于分清两个循环,外层循环用于处理传入的 n,内层循环用来获得描述上一个字符串的字符串;当然双层循环也可以改成递归~

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {

    if(n === 1) {
        return '1';
    }
    n = n-1;
    let countString = '1';
    for(let i = 1;i <= n;i++) {
        
        // 将重复出现的字符串分割、记录,并将记录添加到一个数组中
        let count = 0,number = countString[0];
        let newArr = [];
        const countStringLen = countString.length;

        for(let j = 0;j < countStringLen;j++) {

            if(number !== countString[j]) {
                newArr.push(count + '' + number);
                count = 0;
                number = countString[j];
                
            }
            count++;

        }

        newArr.push(count + '' + number); // 将最后一组数字加进数组

        countString = newArr.join('');

    }

    return countString;

};

2、递归方法

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {

    
        // 递归结束条件
        if(n === 1) {
            return '1';
        }

        let countString = countAndSay(n-1); // 递归
        
        let count = 0,number = countString[0];
        let newArr = [];
        const countStringLen = countString.length;

        for(let j = 0;j < countStringLen;j++) {

            if(number !== countString[j]) {
                newArr.push(count + '' + number);
                count = 0;
                number = countString[j];
                
            }
            count++;
        }
        newArr.push(count + '' + number); // 将最后一组数字加进数组
        countString = newArr.join('');

        return countString;
    
};

大家如果有更好的思路和解法,欢迎大家一起来讨论啊~

这是使用 JavaScript 对 LeetCode《初级算法》的每道题的总结和实现的其中一篇,汇总篇在这里:

juejin.cn/post/700669…