题目

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的走法就是:

0 2 4 6

1 3 5 7

n=3时的走法是:

0     4     8

1  3 5  7 9

2     6    10

n=4时的走法是:

0      6        12

1   5 7    11 13

2 4   8 10    14

3      9         15

可以发现规律,画红色的长度永远是 2n-2 (想法是你试想把所有这些行压缩成两列,两边手挤一下,第二列永远的第一行和最后一行少字)。

利用这个规律,可以按行填字,第一行和最后一行,就是按照2n-2的顺序一点点加的。

其他行除了上面那个填字规则,就是还要处理斜着那条线的字,可以发现那条线的字的位置永远是当前列j+(2n-2)-2i(i是行的index)。

按照上面的规律就可以写出代码了。

代码如下:

 1 public String convert(String s, int nRows) {  
 2         if(s == null || s.length()==0 || nRows <=0)  
 3             return "";  
 4         if(nRows == 1)  
 5             return s;
 6             
 7         StringBuilder res = new StringBuilder();  
 8         int size = 2*nRows-2;  
 9         for(int i=0;i<nRows;i++){  
10             for(int j=i;j<s.length();j+=size){  
11                 res.append(s.charAt(j));  
12                 if(i != 0 && i != nRows - 1){//except the first row and the last row
13                     int temp = j+size-2*i;
14                     if(temp<s.length())
15                         res.append(s.charAt(temp));
16                 }
17             }                  
18         }  
19         return res.toString();  
20     } 

Reference:http://blog.unieagle.net/2012/11/08/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Azigzag-conversion/

转载于:https://www.cnblogs.com/springfor/p/3889414.html

ZigZag Conversion leetcode java相关推荐

  1. leetCode 6. ZigZag Conversion 字符串 (上传费劲)

    6. ZigZag Conversion 题目:https://leetcode.com/problems/zigzag-conversion/ 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. [勇者闯LeetCode] 6. ZigZag Conversion

    [勇者闯LeetCode] 6. ZigZag Conversion Description The string "PAYPALISHIRING" is written in a ...

  3. [LeetCode题解] ZigZag Conversion

    原文在这,可以来我blog翻翻哦. 第二天.今天AC掉了一道之前没AC掉的题目... 今天的题目是6. ZigZag Conversion 题目描述: The string "PAYPALI ...

  4. [LeetCode]ZigZag Conversion

    题目:ZigZag Conversion 一串字符按照Z字形的数组给了我们,要求转成原本的顺序. 思路: 统计"|/"的个数: 竖着的和斜着的下标有对应关系: 竖着的:k = j* ...

  5. ZigZag Conversion

    ZigZag Conversion 1. Question 给定行数,将某字符串转换为zigzag形式,然后按行输出.zigzag形式如: The string "PAYPALISHIRIN ...

  6. java in array_ArrayList to Array Conversion in Java

    ArrayList to Array Conversion in Java Following methods can be used for converting ArrayList to Arra ...

  7. array in java,ArrayList to Array Conversion in Java

    ArrayList to Array Conversion in Java Following methods can be used for converting ArrayList to Arra ...

  8. java conversion_java 基本数据类型之间的转换(Conversion between Java basic data types).doc...

    java 基本数据类型之间的转换(Conversion between Java basic data types) java 基本数据类型之间的转换(Conversion between Java ...

  9. 6——ZigZag Conversion

    六.ZigZag Conversion 锯齿变换 题目大意:输入一个字符串和int型(锯齿层数) 将字符串以锯齿变化重新排序 例: "HAIZEIKEJILAOCHUANZHANG" ...

最新文章

  1. python3 xrange *的作用
  2. [IS-IS] IS-IS路由协议的基本知识及配置
  3. 【C++】45.尽量不要在构造函数中调用函数或开启线程
  4. dataframe转换成dict和列表的技巧
  5. C++学习系列笔记(七)
  6. 什么是徽标LOGO模板?
  7. js常用内建对象之:Date
  8. 如何解决“呈现控件时出错”的问题(转)
  9. 神经网络ANN分类器及OpenCV实现
  10. Eclipse语言包的安装与卸载
  11. 史上最详细教你制作“U盘启动盘”重装Windows10系统
  12. c语言数组判断不及格人数,C语言编程 运用数组求不及格人数
  13. Java对象扁平化的操作
  14. 大鱼号自媒体如何快速通过试运营转正?
  15. 下载国外软件慢(例如:Python安装包)
  16. 蚂蚁课堂 - springboot入门(非常详细)讲解人:(余胜军)
  17. windows7 系统搭建webdav服务
  18. linux学习笔记二
  19. php读取excel文件数据
  20. 超多免费的各类API

热门文章

  1. ORACLE TO_CHAR的一个问题
  2. DataGrid/DataList封装操作函数库!
  3. why different people have different digital response?
  4. Work measurement II
  5. 简单程序跟踪调试方式
  6. “如果把所有的经济学家都放在一起,他们永远不会得出结论。 - 萧伯纳
  7. http://udacity.com 和 https://www.udemy.com 请注意区分!
  8. 关于linkedin的network的观察和自己的职业道路的追求
  9. oppo8.0系统手机(亲测有效)激活xposed框架的教程
  10. QTP的那些事--调用外部的文件的方法