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();
}
}

最新文章

  1. Java面试总结系列之Collections.sort()
  2. elixir 高可用系列(一) Agent
  3. Ahjesus Nodejs01 环境搭建及运行
  4. 《数据结构与算法JavaScript描述》
  5. Java JSON、XML文件/字符串与Bean对象互转解析
  6. zabbix安装,关闭SELinux
  7. python三级菜单
  8. ID3决策树---Java
  9. 【WEB小工具】EncodingFilter—设置全局编码
  10. 迪杰斯特拉(Dijkstra)算法
  11. 动软模板系列二(Model层模板)
  12. STL语法——映射:map 反片语(Ananagrams,UVa 156)
  13. C#使用互斥量(Mutex)实现多进程并发操作时进程间的同步操作(进程同步)
  14. mariadb(第一章)
  15. 使用wxpy自动发送微信消息
  16. Linux之删除带有空格的文件(而不是目录)
  17. SWD 接口电路
  18. WinForm 之 应用程序开机自启动设置方法
  19. ITIL也玩“太极拳”
  20. Httpservlet源码说明

热门文章

  1. Python3 Tkinter-PaneWindow
  2. Python3 标准库:sys
  3. Linux命令详解----ln
  4. C Program进阶-二维数组动态内存开辟
  5. java---StringBuilder类的用法(转载)
  6. s3c2440调试nandflash裸机程序遇到的问题
  7. java-实用的sql语句
  8. 第63天:json的两种声明方式
  9. mac快速安装程序
  10. 在Ubuntu系统下编译arcsim仿真器