当前位置: 首页 > news >正文

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的值来测试不同的输入。

 结语  

一个人至少拥有一个梦想

有一个理由去坚强

心若没有栖息的地方

到哪里都是在流浪

!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大白话解释TCP的三次握手和四次挥手
  • 视频号AI美女跳舞,轻松月入30000+,蓝海赛道,流量池巨大,起号猛
  • 【编程知识】如何有趣的理解变量的数据类型和数值
  • 东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路
  • 【ARM 芯片 安全与攻击 5.2.1 -- 侧信道与隐蔽信道的区别】
  • 代码随想录算法训练营第二十天(二叉树 七)
  • C语言之“ 数组 ”
  • MySQL存储过程深入指南
  • 三千元左右的卧室投影仪怎么选?当贝D6X Pro代替电视的最佳选择
  • 构建实时数据仓库:流式处理与实时计算技术解析
  • FastHTML:使用 Python 彻底改变 Web 开发
  • Linux 基础命令大全
  • 浮点数的使用
  • 【solidity 学习】错误处理机制汇总
  • 【大数据】Eueka与Nacos对比分析,你该怎么选择?
  • 《深入 React 技术栈》
  • 07.Android之多媒体问题
  • CSS实用技巧干货
  • docker python 配置
  • es的写入过程
  • Leetcode 27 Remove Element
  • Map集合、散列表、红黑树介绍
  • php ci框架整合银盛支付
  • Sass Day-01
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 从零开始的无人驾驶 1
  • 翻译:Hystrix - How To Use
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 学习Vue.js的五个小例子
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (10)STL算法之搜索(二) 二分查找
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (pycharm)安装python库函数Matplotlib步骤
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (分布式缓存)Redis哨兵
  • (规划)24届春招和25届暑假实习路线准备规划
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)linux下的时间函数使用
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net 4.0并行库实用性演练
  • .Net CF下精确的计时器
  • .Net Core 笔试1
  • .net 获取url的方法
  • .NET 设计模式初探
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化