• ZigZag Conversion leetcode java


    题目

    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/

  • 相关阅读:
    css3背景色过渡
    HttpUtility.UrlEncode与Server.UrlEncode()转码区别
    js 中编码(encode)和解码(decode)的三种方法
    jQuery 页面加载初始化
    oracle 索引失效原因_汇总
    jdbc连接数据库使用sid和service_name的区别
    作为首席架构师,我是如何选择并落地架构方案的?
    (二)、JAVA运行时数据区域
    (一)、Java内存模型
    Java中Volatile关键字详解
  • 原文地址:https://www.cnblogs.com/springfor/p/3889414.html
Copyright © 2020-2023  润新知