[LeetCode] 6. ZigZag Conversion ☆☆☆
2024-10-19 03:27:43
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"
.
解法:
n = 2 时,字符串坐标变成zigzag的走法就是:
2 4 6 3 5 7
n = 3 时,字符串坐标变成zigzag的走法就是:
4 8 5 7 9 6 10
n = 5 时,字符串坐标变成zigzag的走法就是:
8 16 9 15 17 10 14 18 11 13 19 12 20
可以发现,画红色的(一个循环)长度永远是 2n-2。
利用这个规律,可以按行填字,第一行和最后一行,就是按照2n-2的顺序一点点加的。
其他行除了上面那个填字规则,就是还要处理斜着那条线的字,可以发现那条线的字的位置永远是 j+(2n-2)-2i(i 是当前行的索引,j 是当前行的当前循环的起始值,如 i = 1 时,j 依次等于 1, 9, 17....)。
public class Solution {
public String convert(String s, int numRows) {
if ((s == null) || (s.length() == 0) || (numRows <= 0))
return "";
if (numRows == 1)
return s; StringBuilder res = new StringBuilder("");
int size = 2 * numRows - 2;
for (int i = 0; i < numRows; i++) {
for (int j = i; j < s.length(); j += size) {
res.append(s.charAt(j));
if ((i != 0) && (i != numRows - 1)) {
int temp = j + size - 2 * i;
if (temp < s.length()) {
res.append(s.charAt(temp));
}
}
}
}
return res.toString();
}
}
最新文章
- Java面试总结系列之Collections.sort()
- elixir 高可用系列(一) Agent
- Ahjesus Nodejs01 环境搭建及运行
- 《数据结构与算法JavaScript描述》
- Java JSON、XML文件/字符串与Bean对象互转解析
- zabbix安装,关闭SELinux
- python三级菜单
- ID3决策树---Java
- 【WEB小工具】EncodingFilter—设置全局编码
- 迪杰斯特拉(Dijkstra)算法
- 动软模板系列二(Model层模板)
- STL语法——映射:map 反片语(Ananagrams,UVa 156)
- C#使用互斥量(Mutex)实现多进程并发操作时进程间的同步操作(进程同步)
- mariadb(第一章)
- 使用wxpy自动发送微信消息
- Linux之删除带有空格的文件(而不是目录)
- SWD 接口电路
- WinForm 之 应用程序开机自启动设置方法
- ITIL也玩“太极拳”
- Httpservlet源码说明