算法01-Z字形字符串变换处理

发布于:2025-02-11 ⋅ 阅读:(61) ⋅ 点赞:(0)

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

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

P   A   H   N
A P L S I I G
Y   I   R

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

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

string convert(string s, int numRows);

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

示例 3:

输入:s = "A", numRows = 1
输出:"A"

提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',' 和 '.' 组成
  • 1 <= numRows <= 1000
    
    
    public class Solution {
        public String convert(String s, int numRows) {
            // 1.填充
            int lenNum = s.length();
            char[] sArr = s.toCharArray();
            char[][] charA = new char[numRows][lenNum];
            int begin = 0;
            int gao = 0;
            if (numRows == 1) {
                return s;
            }
    
            for (int i = 0; i < lenNum; i++) {
                // 竖直
                if (begin == 0 || (begin) % (numRows-1) == 0) {
                    System.out.println(gao + " " + begin);
                    charA[gao][begin] = sArr[i];
    
                    gao++;
                    if (gao == numRows) {
                        gao = gao - 2;
                        begin = begin + 1;
                    }
                } else {
                    System.out.println(gao + " " + begin);
                    charA[gao][begin] = sArr[i];
                    begin++;
                    gao--;
                }
            }
            // 2.读取
            StringBuilder s1 = new StringBuilder();
            for (int i = 0; i < numRows; i++) {
                for (int j = 0; j < lenNum; j++) {
                    if (charA[i][j] != '\u0000') {
                        s1.append(charA[i][j]);
                    }
    //                System.out.print(charA[i][j]+" ");
                }
    //            System.out.println();
            }
            return s1.toString();
        }
    
    //    public static void main(String[] args) {
    //        String s1 = "PAYPALISHIRING";
    //        s1 = convert(s1, 3);
    //        System.out.println(s1); // 输出: PAHNAPLSIIGYIR
    //    }
    }
    


网站公告

今日签到

点亮在社区的每一天
去签到