6. ZigZag Conversion
package LeetCode_6 /** * 6. ZigZag Conversion * https://leetcode.com/problems/zigzag-conversion/ * The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: * (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PAHNAPLSIIGYIR" Write the code that will take a string and make this conversion given a number of rows: string convert(string s, int numRows); Example 1: Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" Example 2: Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I Example 3: Input: s = "A", numRows = 1 Output: "A" Constraints: 1. 1 <= s.length <= 1000 2. s consists of English letters (lower-case and upper-case), ',' and '.'. 3. 1 <= numRows <= 1000 * */ class Solution { /* * solution: Array + StringBuilder, * Time complexity:O(n)(each letter access one time), Space complexity:O(n), n is length of s, * */ fun convert(s: String, numRows: Int): String { val stringBuilders = Array(numRows) { StringBuilder() } val len = s.length var index = 0 while (index < len) { var row = 0 while (row < numRows && index < len) { /* * for example: PAYPALISHIRING * stringBuilders[0].append(P) stringBuilders[1].append(A) stringBuilders[2].append(Y) stringBuilders[0].append(P) stringBuilders[1].append(A) stringBuilders[2].append(L) .... * */ stringBuilders[row].append(s[index++]) row++ } //diagonally upward starting from stringBuilders[numRows-2] and stop at stringBuilders[1] var j = numRows - 2 while (j >= 1 && index < len) { stringBuilders[j].append(s[index++]) j-- } } //merge all into StringBuilder 1 for (i in 1 until stringBuilders.size){ stringBuilders[0].append(stringBuilders[i]) } //println(stringBuilders[0].toString()) return stringBuilders[0].toString() } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)