leetcode 随笔: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.

题意基本很明确要用到递归了,每次输出的都是对上一个字符串的操作结果。

rumtime 6ms

做题时间30min

主要浪费时间的地方是在string.append这个函数上了,还是java用的太多。。在用append函数时候,参数直接就count+""了,以为可以自动转换成字符串,然后跑了几次都不行。。最后百度了一下,发现需要to_string(),哎。。。。

class Solution {
public:
	 string countAndSay(int n) {
		 string res = "";
		 countAndSay(res, n);
		 return res;
	 }
	 void countAndSay(string &s,int n)
	 {
		 if (n==1)
		 {
			 s = "1";
		 }
		 else if (n == 2)
		 {
			 s = "11";
		 }
		 else
		 {
			 countAndSay(s, n - 1);
			 string res = "";
			 int c = s[0] - '0', count = 1;
			 for (int i = 1; i < s.length(); i++)
			 {
				 if (c != s[i]-'0')
				 {
					 res.append(to_string(count)+ to_string(c));
					 count = 1;
					 c = s[i]-'0';
					 if (i == s.length() - 1)
					 {
						 res.append(to_string(count) + to_string(c));
						 break;
					 }
					 continue;
				 }
				 if (i == s.length() - 1 && c == s[i]-'0')
				 {
					 count++;
					 res.append(to_string(count) + to_string(c));
				 }
				 else
				 {
					 count++;
				 }
			 }
			 s = res;
		 }
	 }
};

大家对此题好评如潮啊,:)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值