38. 外观数列

#38. 外观数列

难度:简单 (但是这真的是简单难度吗/(ㄒoㄒ)/~~)
题目描述
38. 外观数列_第1张图片
38. 外观数列_第2张图片
解题思路

1、递归

一看到这种题就想起斐波那契数列,用递归思路会很清晰,递归出口就是n=1的时候,返回“1”,然后一级一级往上计算。

public String countAndSay(int n) {
   	if(n == 1)
    		return "1";
   	String pre = countAndSay(n-1);
  	StringBuilder sb = new StringBuilder();
   	char[] str = pre.toCharArray();
   	int p = 0,count = 0;
   	for (int i = 0; i < str.length; i++) {
    		count = 0;
	   	while(p < str.length && str[i] == str[p]) {
	    		count++;
	    		p++;
	   	}
	   	i = p -1;
	   	sb.append(count);
	   	sb.append(str[i]);
	}
	return sb.toString();
     }

38. 外观数列_第3张图片

2、非递归(迭代)

就是把递归编程迭代实现啦

public String countAndSay(int n) {
   	if(n == 1)
    		return "1";
   	String pre = "1";
   	for (int i = 2; i <= n; i++) {
    		StringBuilder sb = new StringBuilder();
    		char[] str = pre.toCharArray();
    		int p = 0,count = 0;
    		for (int j = 0; j < str.length; j++) {
     			count = 0;
   			while(p < str.length && str[j] == str[p]) {
     				count++;
     				p++;
    			}
    			j = p -1;
    			sb.append(count);
    			sb.append(str[j]);
   		}
    		pre = sb.toString();
  	}
  	return pre;
  }

38. 外观数列_第4张图片

你可能感兴趣的:(力扣刷题笔记)