2.23

题目6

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution 
{
    public String convert(String s, int numRows) 
    {
        if(numRows == 1) return s;

        List<StringBuilder> rows = new ArrayList<StringBuilder>();
        for(int i = 0;i < numRows;i++) rows.add(new StringBuilder());
        int i = 0, flag = -1;
        for(char c: s.toCharArray())
        {
            rows.get(i).append(c); //put each char into its corresponding row
            if(i == 0 || i == numRows - 1) flag = -flag; //time to change the direction
            i = i + flag; //next row
        }
        StringBuilder res = new StringBuilder();
        for(StringBuilder row: rows) res.append(row);
        return res.toString();
    }
}

作者:jyd
链接:https://leetcode-cn.com/problems/zigzag-conversion/solution/zzi-xing-bian-huan-by-jyd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution //idot brute force
{
    public String convert(String s, int numRows) 
    {
        if(numRows == 1) return s;
        int remain = s.length() % (numRows + numRows - 2);
        int column;
        if(remain == 0) 
        {
            column = s.length() / (numRows + numRows - 2) * (numRows - 2 + 1);// all blocks
        }
        else if(remain <= numRows && remain > 0)
        {
            column = s.length() / (numRows + numRows - 2) * (numRows - 2 + 1) + 1; 
            //a surplus column
        }
        else
        {
            column = s.length() / (numRows + numRows - 2) * 
            (numRows - 2 + 1) + 1 + remain%numRows;
        }
        char[][] ans = new char[numRows][column];
        int flag = -1;
        int count = 0;
        int j = 0;
        int rowCount = 0;
        try
        {
            for(int i = 0;i <= column;i++)
            {
                for(;;)
                {
                    if(j == 0 || j == numRows - 1)
                    {
                        if(count == s.length()) throw new Exception();
                        flag = -flag;
                        //j = j + flag;
                        //continue;
                    }
                    
                    if(i%(numRows-1) == 0)
                    {
                        ans[j][i] = s.charAt(count);
                        count++;
                        rowCount++;
                        j = j + flag;
                        if(count == s.length()) throw new Exception();
                        if(rowCount % numRows == 0) break;
                    }
                    else
                    {
                        ans[j][i] = s.charAt(count);
                        count++;
                        j = j + flag;
                        if(count == s.length()) throw new Exception();
                        break;
                    }
                }
            }
        }
        catch(Exception e) {}

        ArrayList<Character> myList = new ArrayList<Character>();
        for(int p = 0;p < numRows;p++)
        {
            for (int k = 0;k < column;k++)
            {
                if(ans[p][k] != '\0')
                {
                    myList.add(ans[p][k]);
                }
            }
        }

        StringBuilder str = new StringBuilder();
        for(Character character : myList)
        {
            str.append(character);
        }
        return str.toString();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,743评论 0 2
  • 泛型(Generics) 泛型代码允许你定义适用于任何类型的,符合你设置的要求的,灵活且可重用的 函数和类型。泛型...
    果啤阅读 3,940评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,947评论 0 5
  • 2017.23 周四 homework:写一个简单的加,减,乘,除,四则运算的计算器程序。 程序的三大结构:1.顺...
    henry_bin阅读 3,418评论 0 0
  • 一、js基本数据类型和typeof 1、 null:空、无。表示不存在,当为对象的属性赋值为null,表示删除该属...
    阿苏菇凉阅读 1,852评论 0 0