搜索
您的当前位置:首页正文

LeetCode #38报数

来源:好走旅游网

先看题目要求

 

解决思路 用递归的思想解决问题 从第三项开始,每一项都对前一项的字符串进行拆分统计。为此,我们需要一个空的字符串和一个统计次数的变量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();
    }
}

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top