Appearance
38. Count and Say
https://leetcode.com/problems/count-and-say/
c++
class Solution {
public:
string countAndSay(int n) {
if (n == 1) {
return "1";
}
return sayNum(countAndSay(n - 1));
}
string sayNum(string s) {
char num = '0';
int count = 0;
string result;
for (auto& c : s) {
if (c == num) {
count++;
} else {
if (count > 0) {
result.append(to_string(count)).append(1, num);
}
num = c;
count = 1;
}
}
result.append(to_string(count)).append(1, num);
return result;
}
};
go
func countAndSay(n int) string {
if n == 1 {
return "1"
}
return sayNum(countAndSay(n-1))
}
func sayNum(str string) string {
num := '0'
count := 0
result := ""
for _, c := range str {
if c == num {
count++
} else {
if count > 0 {
result = fmt.Sprintf("%s%d%d", result, count, num-'0')
}
num = c
count = 1
}
}
result = fmt.Sprintf("%s%d%d", result, count, num-'0')
return result
}
js
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
if (n === 1) {
return '1'
}
return sayNum(countAndSay(n - 1))
}
function sayNum(numStr) {
var nums = numStr.split('')
var result = []
var num = null
var count = 0
nums.forEach(x => {
if (x === num) {
count++
} else {
if (count) {
result.push(count, num)
}
num = x
count = 1
}
})
result.push(count, num)
return result.join('')
}
py
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
return '1' if n == 1 else self.sayNum(self.countAndSay(n - 1))
def sayNum(self, num):
cur, count = None, 0
result = []
for n in num:
if cur == n:
count += 1
else:
if count:
result += str(count), cur
cur, count = n, 1
result += str(count), cur
return ''.join(result)