zoukankan      html  css  js  c++  java
  • leetCode 6. 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 s, int numRows);

    Example 1:

    Input: s = "PAYPALISHIRING", numRows = 3
    Output: "PAHNAPLSIIGYIR"
    

    Example 2:

    Input: s = "PAYPALISHIRING", numRows = 4
    Output: "PINALSIGYAHRPI"
    Explanation:
    
    P     I    N
    A   L S  I G
    Y A   H R
    P     I
     1 //    方法一超过38.49%
     2     public String convert(String s, int numRows) {
     3         if (numRows <= 1 || s.length() <= 1) return s;
     4         char[][] res = new char[numRows][s.length() * (numRows - 1) / (2 * numRows - 2)+1];
     5         boolean direction = true;//行走方向,默认是向下走
     6         int row = 0, col = 0;//下一个填的位置
     7         for (int i = 0; i < s.length(); i++) {
     8             res[row][col] = s.charAt(i);
     9             if (row == numRows - 1) {//触底,改变行走方向
    10                 direction = false;
    11             }
    12             if (i != 0 && row == 0) {//碰头,改变行走方向
    13                 direction = true;
    14             }
    15             if (direction) {// 向下走
    16                 ++row;
    17             } else {// 向右上走
    18                 --row;
    19                 ++col;
    20             }
    21         }
    22         s=new String("");
    23         for (int i = 0; i < res.length; i++) {
    24             for (int j = 0; j < res[0].length; j++) {
    25                 if (res[i][j] != '')
    26                     s += res[i][j];
    27             }
    28         }
    29         return s;
    30     }
    31 
    32 //  方法二:超过30.42%
    33     String strOfi(String s, int begin, int step) {
    34         String rs = new String("");
    35 
    36         while (begin < s.length()) {
    37             rs += s.charAt(begin);
    38             begin += step;
    39         }
    40         return rs;
    41     }
    42     public String convert(String s, int numRows) {
    43         if (numRows <= 1) return s;
    44         String rs = new String("");
    45         //第一行
    46         rs += strOfi(s, 0, 2 * numRows - 2);
    47         //中间行
    48         for (int i = 1; i < numRows-1; i++) {
    49             String s1 = new String("");
    50             String s2 = new String("");
    51             s1=strOfi(s,i,2*numRows-2);
    52             s2=strOfi(s,2*numRows-i-2,2*numRows-2);
    53 
    54             int j,k;
    55             for (j = 0,k=0; j < s1.length() && k<s2.length(); j++,k++) {
    56                 rs+=s1.charAt(j);
    57                 rs+=s2.charAt(k);
    58             }
    59             if (j < s1.length()){
    60                 rs+=s1.charAt(j);
    61             }
    62             if (k<s2.length()){
    63                 rs+=s2.charAt(k);
    64             }
    65         }
    66         //最后一行
    67         rs += strOfi(s, numRows - 1, 2 * numRows - 2);
    68         return rs;
    69     }
  • 相关阅读:
    Intellij Idea安装主题包
    Spring中bean的含义
    IntelliJ IDEA 中 右键运行时没有run;新建时,选项没有Java class的解决方法和具体解释
    Linux下修改profile后用户无法登陆的问题
    11 | 怎么给字符串字段加索引?
    09 | 普通索引和唯一索引,应该怎么选择?
    08 | 事务到底是隔离的还是不隔离的?
    07 | 行锁功过:怎么减少行锁对性能的影响?
    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    05 | 深入浅出索引(下)
  • 原文地址:https://www.cnblogs.com/yfs123456/p/10980796.html
Copyright © 2011-2022 走看看