欣迪

出處: https://leetcode.com/explore/interview/card/top-interview-questions-easy/127/strings/886/

The count-and-say sequence is a sequence of digit strings defined by the recursive formula:

  • countAndSay(1) = "1"
  • countAndSay(n) is the way you would “say” the digit string from countAndSay(n-1), which is then converted into a different digit string.

To determine how you “say” a digit string, split it into the minimal number of groups so that each group is a contiguous section all of the same character. Then for each group, say the number of characters, then say the character. To convert the saying into a digit string, replace the counts with a number and concatenate every saying.

For example, the saying and conversion for digit string "3322251":

Given a positive integer n, return the nth term of the count-and-say sequence.

Example 1:

Input: n = 1
Output: "1"
Explanation: This is the base case.

Example 2:

Input: n = 4
Output: "1211"
Explanation:
countAndSay(1) = "1"
countAndSay(2) = say "1" = one 1 = "11"
countAndSay(3) = say "11" = two 1's = "21"
countAndSay(4) = say "21" = one 2 + one 1 = "12" + "11" = "1211"

Constraints:

  • 1 <= n <= 30
/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
    if (n === 1) return '1'
    const theLoop = (num) => {
       let current = num[0]
       let count = 0  
       let str = ''
       let i = 0
       while(i < num.length) {
           if (current === num[i]) {
               count++
           } else {             
               str += count + current
               current = num[i]
               count = 1
           }  
           i++
       }
       str += count + current
       return str
    }
    
    let res = "1"
    for(let i = 1; i < n; i++) {
        res = theLoop(res)
    }
    
    return res
};

思路

又是一個遞迴的 loop, 從 n 等於 2 開始進入迴圈。

逐一偵測每一個字是否和上一個字相同,若相同則累加數字,不同則進行結算。

訂閱 IT-Monk

訂閱最新文章的發布消息! 😚😚😚
Loading

作者介紹 - 欣迪

欣迪

從設計到寫程式,發現自己有追求前端技巧的自虐傾向。不斷的踩坑,再從坑裡爬出來,慢慢對攀岩有點心得。 目前在多間公司擔任網站設計顧問。 同時也是網站架設公司負責人。