首页 > 编程知识 正文

LeetCode之报数简单 模拟 递归

时间:2023-05-05 20:27:50 阅读:265887 作者:677

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1. 12. 113. 214. 12115. 111221

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

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

注意:整数顺序将表示为一个字符串。

示例 1:

输入: 1输出: "1"

示例 2:

输入: 4输出: "1211"

 这道题耗费了我3个小时,woc,其实想想不难,只是我自己不会写递归,所以学习了一下,浪费时间。这里简单介绍一下递归算法自己的心得,

1、先考虑递归出口,也就是最简单情况的结果。

2、考虑第二轮跟第一轮的关系,这涉及到在代码的何处加 function(n-1)

3、最后把代码整体逻辑想清楚,一定要十分清楚!!! 然后确定每一轮的调用都是如此,才可递归进行。

还好最后完成是我的代码击败了96.58%的提交。(欣慰了一点)

public String countAndSay(int n) { if(n==1) { //递归出口 return "1"; } String origin = countAndSay(n-1); //第二轮跟第一轮的关系 StringBuilder sb = new StringBuilder(); int len = origin.length(); int count=1; for(int i = 0;i<len;i++){ if(i==len-1){ //判断是否最后一个字符,防止接下来的数组越界 sb.append(count); sb.append(origin.charAt(i)); break; } if(origin.charAt(i+1)==origin.charAt(i)){ count++; continue; }else{ sb.append(count); sb.append(origin.charAt(i)); count = 1; } } return sb.toString(); //返回值符合代码逻辑,每一轮都如此进行 }

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。