报数(leetcode38)

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作  "one 1"  ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211

给定一个正整数 n ,输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例 1:

输入: 1
输出: "1"

示例 2:

输入: 4
输出: "1211"

因为输出字符串,所以用到js中的join()方法和push方法

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
    var a = ['1'];
    for (var i = 1; i < n; i++){
        a = nextSeq(a);
    }
    return a.join("");//join() 方法用于把数组中的所有元素放入一个字符串。

    function nextSeq(arr) {
        var len = arr.length;
        var nextArr = [];
        var iLeft = 0;
        var i = iLeft;
        while (i < len) {
            while (arr[i] == arr[iLeft] && i < len) i++;
            var num = i - iLeft;
            nextArr.push(num.toString());//push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
            nextArr.push(arr[iLeft]);
            iLeft = i;
        }
        return nextArr;
} 
};

猜你喜欢

转载自blog.csdn.net/Kazaki_X/article/details/81604066