C++实现LeetCode(38.计数和读法)
[LeetCode] 38. Count and Say 计数和读法
The count-and-say sequence is the sequence of integers with the first five terms as following:
1.11 is read off as "one 1" or 11.
2.11
3.21
4.1211
5.111221
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 where 1 ≤ n ≤ 30, 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: 1Example 2:
Output: "1"
Input: 4这道计数和读法问题还是第一次遇到,看似挺复杂,其实仔细一看,算法很简单,就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的 string 里。代码如下:
Output: "1211"
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; }};
打印出了前 12 个数字,发现一个很有意思的现象,不管打印到后面多少位,出现的数字只是由 1, 2 和3 组成,前十二个数字如下:
1【C++实现LeetCode(38.计数和读法)】到此这篇关于C++实现LeetCode(38.计数和读法)的文章就介绍到这了,更多相关C++实现计数和读法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
1 1
2 1
1 2 1 1
1 1 1 2 2 1
3 1 2 2 1 1
1 3 1 1 2 2 2 1
1 1 1 3 2 1 3 2 1 1
3 1 1 3 1 2 1 1 1 3 1 2 2 1
1 3 2 1 1 3 1 1 1 2 3 1 1 3 1 1 2 2 1 1
1 1 1 3 1 2 2 1 1 3 3 1 1 2 1 3 2 1 1 3 2 1 2 2 2 1
3 1 1 3 1 1 2 2 2 1 2 3 2 1 1 2 1 1 1 3 1 2 2 1 1 3 1 2 1 1 3 2 1 1
推荐阅读
- 10行Python代码就能实现的八种有趣功能详解
- 深入了解vue-router原理并实现一个小demo
- mybatis多表查询的实现(xml方式)
- vue实现登录滑动拼图验证
- 别再用 Redis List 实现消息队列了,Stream 专为队列而生
- Apache Pulsar 技术系列 - Pulsar事务实现原理
- Vue中使用watch同时监听多个值的实现方法
- vue实现登陆功能
- vue实现移动端可拖拽式icon图标
- Vue实现简单选项卡效果