【LeetCode】38.外观数列

21 篇文章 0 订阅

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意:整数序列中的每一项将表示为一个字符串。

class Solution {
public:
	string countAndSay(int n) {
		string s = "1";
		if (n == 1) {
			return s;
		}
		for (int i = 2; i <= n; i++) {
			s = readString(s);
		}
		return s;
	}

	string readString(string s) {
		if (s == "1") {
			return "11";
		}
		int num = 0;//计数
		string s0 = "";//存最后结果
		string s1 = "";//数字转
		s1 += s[0];
		string s2 = "";//数量转
		int len = s.length();
		for (int i = 1; i < len; i++) {
			//扫描
			if (s[i] == s[i - 1]) {
				num++;
			}
			else {
				s2 = to_string(num + 1);
				s0 += (s2 + s1);
				s1 = s[i];
				num = 0;
			}
		}
		//处理最后一段
		s2 = to_string(num + 1);
		s0 += (s2 + s1);

		return s0;
	}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值