6. LeetCode:Z 字形变换

一. 问题描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

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

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
示例 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

二. 问题分析

2.1 看到结果是每一行去掉空格后连接起来,想到用数组存放每一行的数据(并且不需要空格)。
2.2 循环遍历每一个字符串,并判断他们是属于数组的第几个,这样追加到后面。
2.3 难点就是怎么判断它是哪一行的呢?首先我们确定一个循环单位的长度:unit = 2*numRows -2,
i对unit取余,如果余数是0,那就是第一行;余数是1,就是第二行;...;但是存在余数大于行数的情况怎么办呢?我们发现unit-余数就是i对应的行数,分析完毕。

三. 代码书写

package com.hjb.leetcode;
/**
 * @DESC Z-字形变换
 * @author HJB
 * @date 2020年4月21日 下午9:05:29
 */
public class Z_ZiXingBianHuan {
    public String convert(String s, int numRows) {
        String[] arr = new String[numRows];
        for (int i=0; i<numRows; i++) {
            arr[i] = "";
        }
        int unit = numRows * 2 - 2;
        if (unit == 0) {
            return s;
        }
        for (int i=0; i<s.length(); i++) {
            int index = i % unit;
            if (index >= numRows) {
                index = unit -index;
            }
            String str = arr[index] + s.charAt(i);
            arr[index] = str;
        }
        String result = "";
        for (int i=0;i<numRows;i++) {
            result += arr[i];
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println(new Z_ZiXingBianHuan().convert("LEETCODEISHIRING", 4));
    }
}
运行结果
LDREOEIIECIHNTSG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETC...
    LeeYunFeng阅读 964评论 0 50
  • 一、题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPAL...
    Mage阅读 672评论 0 1
  • 6. Z 字形变换 题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为...
    索毅阅读 228评论 0 0
  • 题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODE...
    玖月晴阅读 168评论 0 0
  • 需求 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCOD...
    惑也阅读 340评论 0 1