[LeetCode] 6. ZigZag Converesion 之字型转换字符串
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 text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
这道题就是看坐标的变化,找规律并分块处理。参考:爱做饭的小莹子
规律:第一行和最后一行,就是按照2n-2的顺序一点点加的。斜着那条线的字的位置是当前列j+(2n-2)-2i(i是行的index)。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public String convert(String s, int nRows) { if (s == null || s.length()== 0 || nRows <= 0 ) return "" ; if (nRows == 1 ) return s; StringBuilder res = new StringBuilder(); int size = 2 *nRows- 2 ; for ( int i= 0 ;i<nRows;i++){ for ( int j=i;j<s.length();j+=size){ res.append(s.charAt(j)); if (i != 0 && i != nRows - 1 ){ //except the first row and the last row int temp = j+size- 2 *i; if (temp<s.length()) res.append(s.charAt(temp)); } } } return res.toString(); } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Solution( object ): def convert( self , s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows = = 1 : return s step, zigzag = 2 * numRows - 2 , "" for i in xrange (numRows): for j in xrange (i, len (s), step): zigzag + = s[j] if 0 < i < numRows - 1 and j + step - 2 * i < len (s): zigzag + = s[j + step - 2 * i] return zigzag |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Solution { public : string convert(string s, int nRows) { if (nRows <= 1) return s; string res = "" ; int size = 2 * nRows - 2; for ( int i = 0; i < nRows; ++i) { for ( int j = i; j < s.size(); j += size) { res += s[j]; int tmp = j + size - 2 * i; if (i != 0 && i != nRows - 1 && tmp < s.size()) res += s[tmp]; } } return res; } }; |
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构