38. Count and Say (String; DP)
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 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 sequence.
Note: The sequence of integers will be represented as a string.
思路:序列问题,用动态规划存储上一个状态,从而能够推导出下一个元素
class Solution { public: string countAndSay(int n) { string previous = "1"; string current = ""; string tmp; stringstream ss; int times; for(int i = 2; i <= n; i++){ //从头开始推导序列中每个元素 for(int j = 0; j < previous.length(); j++){ //遍历前一个元素中的每一位 times = 1; while(j+1 < previous.length()&&previous[j+1]==previous[j]){ times++; j++; } ss.clear(); ss << times; ss >> tmp; current.append(tmp); ss.clear(); ss << previous[j]; ss >> tmp; current.append(tmp); } previous = current; current = ""; } return previous; } };