[LeetCode] 38. Count and Say 计数和读法
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 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 term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
Input Constraints:
1 <= n <= 30
对于前一个数,每一段相同元素的子数列数出相同元素的个数,然后这个子数组变为个数+数字,重复到结束。
解法: 迭代Iteration
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public String countAndSay( int n) { if (n <= 0 ) return null ; String result = "1" ; int i = 1 ; while (i < n) { StringBuilder sb = new StringBuilder(); int count = 1 ; for ( int j = 1 ; j < result.length(); j++) { if (result.charAt(j) == result.charAt(j - 1 )) { count++; } else { sb.append(count); sb.append(result.charAt(j - 1 )); count = 1 ; } } sb.append(count); sb.append(result.charAt(result.length() - 1 )); result = sb.toString(); i++; } return result; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class Solution { public String countAndSay( int n) { StringBuilder curr= new StringBuilder( "1" ); StringBuilder prev; int count; char say; for ( int i= 1 ;i<n;i++){ prev=curr; curr= new StringBuilder(); count= 1 ; say=prev.charAt( 0 ); for ( int j= 1 ,len=prev.length();j<len;j++){ if (prev.charAt(j)!=say){ curr.append(count).append(say); count= 1 ; say=prev.charAt(j); } else count++; } curr.append(count).append(say); } return curr.toString(); } } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Solution: # @return a string def countAndSay( self , n): seq = "1" for i in xrange (n - 1 ): seq = self .getNext(seq) return seq def getNext( self , seq): i, next_seq = 0 , "" while i < len (seq): cnt = 1 while i < len (seq) - 1 and seq[i] = = seq[i + 1 ]: cnt + = 1 i + = 1 next_seq + = str (cnt) + seq[i] i + = 1 return next_seq |
Python: wo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Solution( object ): def countAndSay( self , n): """ :type n: int :rtype: str """ s = '1' i = 1 while i < n: count = 1 curr = s[ 0 ] news = '' for j in xrange ( 1 , len (s)): if curr = = s[j]: count + = 1 else : news + = str (count) + s[j - 1 ] curr = s[j] count = 1 news + = str (count) + s[ - 1 ] s = news i + = 1 return s |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Solution { public : string countAndSay( int n) { if (n <= 0) return "" ; string res = "1" ; while (--n) { string cur = "" ; for ( int i = 0; i < res.size(); ++i) { int cnt = 1; while (i + 1 < res.size() && res[i] == res[i + 1]) { ++cnt; ++i; } cur += to_string(cnt) + res[i]; } res = cur; } return res; } }; |
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构