首页 > 其他 > 详细

Leetcode 模拟 Count and Say

时间:2014-09-07 19:49:55      阅读:386      评论:0      收藏:0      [点我收藏+]

Count and Say

 Total Accepted: 14508 Total Submissions: 53213My Submissions

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.






题意:有一个整数序列 1,11,21,1211,111221,...
它是这样产生的:
1读作 ‘one 1’,即 11
11读作 ‘two 1s‘,即 21
21读作 ‘one 2 one 1‘,即1211
...
给定整数 n,返回该序列的第 n 个数
思路:模拟
复杂度:时间O(n),空间O(1)


//一般写法
string countAndSay(int n){
	string last = "1";
	while(--n){
		int count = 1;
		char c = last[0];
		string cur;
		for(int i = 1; i <= last.size(); ++i){
			if(i < last.size() && last[i] == c) count++;
			else{
				cur += count + '0';
				cur += c;
				if(i < last.size()){
					count = 1;
					c = last[i];
				}
			}
		}
		last = cur;
	}
	return last;
}
//使用stl
string countAndSay(int n){
	string past = "1";
	while(--n){
		string cur;
		for(auto iter = past.begin(); iter != past.end();){
			auto iter2 = find_if(iter, past.end(), bind1st(not_equal_to<char>(), *iter));
			cur += distance(iter, iter2) + '0';
			cur += *iter;
			iter = iter2;
		}
		past = cur;
	}
	return past;
}


Leetcode 模拟 Count and Say

原文:http://blog.csdn.net/zhengsenlie/article/details/39121719

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!