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

[Java][Leetcode middle] 6. Z 字形变换

法一,自己想的

使用一个复合结构的 List<ArrayList<String>> 来存储每一行的字母,最后按序输出。
使用flag来判断到底放到哪一行上去。flag按照:0–1–2–1–0–1–2这样变化,实现躺着的Z字形。

    public String convert(String s, int numRows) {if (numRows == 1) {return s;}StringBuilder sb = new StringBuilder();// use three arrayListList<ArrayList<String>> xxx = new ArrayList<>();for (int i = 0; i < numRows; i++) {xxx.add(new ArrayList<>());}int flag = 0;int zj = 1; // 0-1-2-1-0int cnt = 0; // record the index of String swhile (cnt < s.length()) {char ch = s.charAt(cnt);ArrayList<String> strs = xxx.get(flag);strs.add(ch + "");xxx.set(flag, strs);if(flag == numRows - 1) {zj =  -1;}if(flag == 0){zj = 1;}flag += zj;cnt++;}for(int i = 0; i < numRows; i++) {ArrayList<String> strs = xxx.get(i);for (String str : strs) {sb.append(str);}}return sb.toString();}

很慢
在这里插入图片描述

方法二

采用StringBuilder[]代替上文的嵌套List,优化了一下开头

public String convert2(String s, int numRows) {int n = s.length(), r = numRows;if (r == 1 || r >= n) {return s;}StringBuilder[] sbs = new StringBuilder[n];for (int i = 0; i < numRows; i++) {sbs[i] = new StringBuilder();}int flag = 0;int zj = 1; // 0-1-2-1-0int cnt = 0; // record the index of String swhile (cnt < s.length()) {char ch = s.charAt(cnt);sbs[flag].append(ch + "");if(flag == numRows - 1) {zj =  -1;}if(flag == 0){zj = 1;}flag += zj;cnt++;}StringBuilder sb = new StringBuilder();for(int i = 0; i < numRows; i++) {sb.append(sbs[i]);}return sb.toString();}

在这里插入图片描述

http://www.dtcms.com/a/206174.html

相关文章:

  • Python可视化设计原则
  • 【工作流】Fastgpt配置豆包模型-火山引擎
  • 青少年编程与数学 02-019 Rust 编程基础 23课题、web服务器
  • React19 项目开发中antd组件库版本兼容问题解决方案。
  • React 如何封装一个可复用的 Ant Design 组件
  • Flask vs. Django:如何选择最适合你的 Web 框架?
  • 框架开发与原生开发的权衡:React案例分析(原生JavaScript)
  • JVM部分内容
  • MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决
  • uniapp实现的简约美观的票据、车票、飞机票模板
  • EtpBot:安卓自动化脚本开发神器
  • 云原生微服务的前世今生
  • Oracle 数据文件被删除后使用rman备份恢复过程
  • VUE 文件下载,流形式的文件下载,判断返回的是流还是JSON;获取下载名称
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.10)
  • React中常用的钩子函数:
  • go语言基础
  • 交叉编译DirectFB报错解决方法
  • 【VLNs篇】04:SayNav-为新环境中的动态规划到导航进行大型语言模型的基础构建
  • 抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案
  • 手机合集(不定期更新)
  • 【未来展望】云、AI与元宇宙的融合架构
  • 【NLP 77、Python环境管理工具之conda】
  • App开发中为什么import android.app.Activity;
  • Python打卡训练营day33——2025.05.22
  • 封装红黑树实现mymap和myset
  • Pinia持久化存储插件, 持久化存储插件安装(超详细教程)
  • c/c++的opencv腐蚀
  • 如何解决鸿蒙应用闪退问题
  • ABP VNext + Elasticsearch 实战:微服务中的深度搜索与数据分析