Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 1.64 KB

38md.md

File metadata and controls

65 lines (52 loc) · 1.64 KB

LeetCode 38. Count and Say

##題目 The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221, ...

1 is read off as "one 1" or 11. 11 is read off as "two 1s" or 21. 21 is read off as "one 2, then one 1" or 1211. Given an integer n, generate the nth sequence.

Note: The sequence of integers will be represented as a string.

##翻譯 這是一個算完說出來的序列,序列如下:
1, 11, 21, 1211, 111221, ...

1     讀做 1個1, 所以下一個變成 11  
11    讀做 2個1, 也就是21  
21    讀做 1個2 1個1,得到1211
1211  1個1,1個2,2個1  111221  

##思路 相信這題很多人跟我一樣,看懂題目後就覺得簡單了,直接看下面的code就行。

##解題

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
    if(n <= 1) return "1";
    
    var countSay = '1';
    
    for(var i = 2 ; i <= n ; i++){
        var num = countSay.charAt(0); //從開頭開始數
        var temp = countSay;
        var count = 1;
        
        countSay = ''; // 清空儲存這輪數完的字串
        
        
        for(var j = 1 ; j < temp.length; j++){
            // 數字相同,count++
            if(temp.charAt(j) == num){
                count++;
            } else {
                // 數字不同,將目前的count與num加到字串,更新num,新的num從1開始數起
                countSay += count;     
                countSay += num;
                num = temp.charAt(j);
                count = 1;
            }
        }
        countSay += count;     
        countSay += num;
    }
    return countSay;

};