Leetcode JAVA刷刷站(38)外观数列
一、题目概述
二、思路方向
为了解决这个问题,我们可以编写一个Java函数
countAndSay
,该函数接受一个整数n
作为输入,并返回外观数列的第n
个元素。这个函数将基于递归公式来构建数列,其中countAndSay(1) = "1"
,而countAndSay(n)
是countAndSay(n-1)
的行程长度编码。
三、代码实现
public class Solution { public String countAndSay(int n) { if (n == 1) { return "1"; } // 递归调用以获取前一个外观数列 String prev = countAndSay(n - 1); // 用于构建当前外观数列的StringBuilder StringBuilder sb = new StringBuilder(); // 初始化计数器和当前字符 int count = 1; char currentChar = prev.charAt(0); // 遍历前一个外观数列 for (int i = 1; i < prev.length(); i++) { // 如果当前字符与前一个字符相同,则计数器加1 if (prev.charAt(i) == currentChar) { count++; } else { // 如果当前字符与前一个字符不同,则将计数器和当前字符添加到结果中 // 并重置计数器和当前字符 sb.append(count).append(currentChar); count = 1; currentChar = prev.charAt(i); } } // 不要忘记添加最后一个字符的计数和字符 sb.append(count).append(currentChar); // 返回构建好的当前外观数列 return sb.toString(); } public static void main(String[] args) { Solution solution = new Solution(); int n = 5; System.out.println(solution.countAndSay(n)); // 输出外观数列的第n个元素 }
}
执行结果:
四、小结
在这个实现中,我们首先检查基本情况,即
n == 1
时,直接返回"1"
。然后,我们递归地调用countAndSay(n - 1)
来获取前一个外观数列。接下来,我们使用一个StringBuilder
来构建当前外观数列。我们遍历前一个数列,使用一个计数器来跟踪当前字符的连续出现次数,并在遇到不同的字符时,将计数器和当前字符添加到结果中。最后,我们返回构建好的字符串作为结果。在
main
方法中,我们创建了一个Solution
对象,并调用countAndSay
方法来获取并打印外观数列的第n
个元素。你可以根据需要修改n
的值来测试不同的输入。
结语
一个人至少拥有一个梦想
有一个理由去坚强
心若没有栖息的地方
到哪里都是在流浪
!!!