zoukankan      html  css  js  c++  java
  • Leetcode 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 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

       5 7    11 13

     2 4   8 10    14

     3      9         15 

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

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

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


     java code:

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

    Reference:

    1. http://www.cnblogs.com/springfor/p/3889414.html

  • 相关阅读:
    triangle
    Synchronizing timer
    jenkins 安装网址
    Java I/O编程思路
    SpEL快速入门
    Spring ApplicationContext的事件机制
    畅谈Spring设计哲学
    Spring ApplicationContext的国际化支持
    SQL中 WHERE与HAVING的区别
    Hibernate的查询语言之HQL(二)——Hibernate查询的from字句
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4791273.html
Copyright © 2011-2022 走看看