zoukankan      html  css  js  c++  java
  • LeetCode--006--Z字型变换(java)

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

    比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

    L   C   I   R
    E T O E S I I G
    E   D   H   N
    

    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"

    请你实现这个将字符串进行指定行数变换的函数:

    string convert(string s, int numRows);

    示例 1:

    输入: s = "LEETCODEISHIRING", numRows = 3
    输出: "LCIRETOESIIGEDHN"
    

    示例 2:输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释: 

    L     D     R
    E   O E   I I
    E C   I H   N
    T     S     G


    分析:
    竖着看,看每个字符属于第几行,每一行为一个string,最后把每一行都连接起来。行索引index和总行数的关系为index = i %(2 * rowNums - 2),
    当index小于总行数,index不变,否则index = 2 * rowNums - 2 - index,比如第二列的c,index = 2 * 4 - 2 - 4 = 2;

     1 class Solution {
     2     public String convert(String s, int numRows) {
     3         if(numRows<=1)return s;
     4         StringBuilder[] sb = new StringBuilder[numRows];
     5         for(int i = 0;i < sb.length;i++){
     6             sb[i] = new StringBuilder("");
     7         }
     8         for(int i = 0;i <s.length();i++){
     9             int index = i %(2 * numRows - 2);
    10             index = index < numRows ? index : 2*numRows - 2 - index;
    11             sb[index].append(s.charAt(i));
    12         }
    13         for(int i = 1;i < sb.length;i++){
    14             sb[0].append(sb[i]);
    15         }
    16         return sb[0].toString();
    17     }
    18 }

     2019-03-13 22:52:42

  • 相关阅读:
    【leetcode】下一个排列
    【leetcode】配对交换
    【leetcode】两个相同字符之间的最长子字符串
    052-126&127
    052-125
    052-124
    052-123
    052-122
    052-121
    052-120
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10527217.html
Copyright © 2011-2022 走看看