Leetcode Count and Say 数数列数字
2013-12-03 08:33
489 查看
Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
这个是facebook的面试题,题目不好理解。
这样说会比较清楚:
其实就是一个数列n=1的时候数列为1; n=2,数列为11,n=3数列为21;n=4数列为1211;n=5数列是111221
n=2的时候数数列1有什么数字; n=3的时候数数列2有什么数字; n=4的时候数数列3有什么数字……
我的解法,利用两个临时string,数一个string存入另外一个,如此反复。
下面是leetcode上比较不错的算法:
http://discuss.leetcode.com/questions/217/count-and-say
更新下面的程序更加清晰快速点,4ms
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1is read off as
"one 1"or
11.
11is read off as
"two 1s"or
21.
21is 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.
这个是facebook的面试题,题目不好理解。
这样说会比较清楚:
其实就是一个数列n=1的时候数列为1; n=2,数列为11,n=3数列为21;n=4数列为1211;n=5数列是111221
n=2的时候数数列1有什么数字; n=3的时候数数列2有什么数字; n=4的时候数数列3有什么数字……
我的解法,利用两个临时string,数一个string存入另外一个,如此反复。
class Solution { public: string countAndSay(int n) { if (n == 0) return ""; string str = "1"; for (int i = 1; i < n; i++) { char ch = '0'; string str2 = ""; int counting = 0; for (int j = 0; j < str.length(); j++) { if (str[j] == ch) counting++; else { if (counting > 0) str2 = str2 + char(counting + '0') +ch; counting = 1; ch = str[j]; } } str2 = str2 + char(counting + '0') +ch; str = str2; } return str; } };
下面是leetcode上比较不错的算法:
http://discuss.leetcode.com/questions/217/count-and-say
class Solution { public: string getNext(string &s) { if(s == "") return "1"; string temp = ""; for(int i = 0; i < s.size(); i++) { int cnt = 1; while(i+1 < s.size() && s[i] == s[i+1]) { i++; cnt++; } stringstream ss; ss << cnt; temp += ss.str(); temp += s[i]; } return temp; } string countAndSay(int n) { string s = ""; if(n == 0) return s; for(int i = 0; i < n; i++) { s = getNext(s); } return s; } };
更新下面的程序更加清晰快速点,4ms
//2014-1-26 class Solution { public: string countAndSay(int n) { string rs; string tmp; if (n==0) return rs; rs.push_back('1'); for (int i = 1; i < n; i++) { int c = 1;//注意:牢记每次都需要重置的时候一定要重置,否则答案错误!!! for (int j = 1; j < rs.length(); j++) { if (rs[j] == rs[j-1]) c++; else { tmp.push_back(c+'0'); tmp.push_back(rs[j-1]); c = 1; } } tmp.push_back(c+'0'); tmp.push_back(rs.back()); rs.clear(); rs.swap(tmp); } return rs; } };
相关文章推荐
- [LeetCode]—Count and Say 读数字
- [LeetCode 38] Count and Say
- leetcode_c++:Count and Say(038)
- LeetCode:Count and Say
- [leetcode] Count and Say
- Leetcode-Count and Say-Python
- 【LeetCode】Count and Say
- leetcode - Count and Say
- **(leetcode_string) Count and Say
- LeetCode Online Judge 题目C# 练习 - Count and Say
- leetcode-38 Count and Say
- [leetcode]Count and Say
- LeetCode 38 Count and Say(字符串规律输出)
- leetcode笔记--Count and Say
- LeetCode38——Count and Say
- <LeetCode OJ>Count and Say【38】(测试案例有错)
- LeetCode_Count and Say
- [LeetCode]Count and Say
- leetcode——38——Count and Say
- [leetcode]Count and Say