6.z字型变换

6.z字型变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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);

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

/*class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1) return s;
        if(numRows==2) 
        String z="";
        for(int i=0;i<numRows;i+=(2*numRows)-2)
        {
            
        }
        for(int i=1;i<numRows-1;i++)
        {
            for(int j=i;j<s.length();j+=(2*numRows)-2)
                z+=s.charAt(j)
        }
        for(int i=numRows-1;i<numRows;i+=(2*numRows)-2)
        {
            
        }
    }
}*/

class Solution {
    public String convert(String s, int numRows) {
        if(numRows ==1 ) return s;
        List<StringBuilder> rows = new ArrayList<>();
        for(int i=0;i<Math.min(numRows,s.length());i++)
            rows.add(new StringBuilder());
        int curRow = 0;
        boolean goingDown = false;
        for(char c : s.toCharArray()){
            rows.get(curRow).append(c);
            if(curRow ==0 || curRow == numRows-1) goingDown = !goingDown;
            curRow += goingDown? 1:-1;
        }
        StringBuilder ret = new StringBuilder();
        for(StringBuilder row: rows ) ret.append(row);
        return ret.toString();
    }
}
发布了27 篇原创文章 · 获赞 2 · 访问量 756

猜你喜欢

转载自blog.csdn.net/qq_44028171/article/details/98755430