LeetCode #38报数

本文介绍了一种使用递归思想解决Count and Say问题的方法,通过对比数组元素并计数,利用StringBuilder进行字符串拼接,实现了高效求解。

先看题目要求

 

解决思路 用递归的思想解决问题 从第三项开始,每一项都对前一项的字符串进行拆分统计。为此,我们需要一个空的字符串和一个统计次数的变量count ,每一次比较arr[i]和arr[i-1]的值,若相等,则将count的值加1,若不相等,则将count的值置为1,当i指针遍历到数组最后一个元素时,将这个值与当前的count拼接起来,再将结果拼接到此前的字符串中即可。

由于要进行频繁的字符串拼接操作,我们选择StringBuilder这个类来进行相关操作。

代码

class Solution {
    public String countAndSay(int n) {
       int count = 1;
		StringBuilder ret = new StringBuilder();
		if (n == 1) {
			return "1";
		} else if (n == 2) {
			return "11";
		}
		char[] arr = countAndSay(n - 1).toCharArray();
		for (int i = 0; i < arr.length; i++) {
			if (i == 0) {
				continue;
			}
			while (i <= arr.length - 1 && arr[i] == arr[i - 1]) {
				count++;
				if (i == arr.length - 1) {
					ret.append(count).append(arr[i]);
					break;
				}
				i++;
			}

			while (arr[i] != arr[i - 1]) {
				ret.append(count).append(arr[i-1]);
				count = 1;
				if (i == arr.length - 1) {
					ret.append(count).append(arr[i]);
				}
				break;
			}
		}
		return ret.toString();
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值