美文网首页
6.Z字形变换

6.Z字形变换

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-12-06 21:10 被阅读0次

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

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

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

    解答:

    public static String convert(String s, int numRows) {
            //考虑极端情况
            if (numRows==1) {
                return s;
            }
            char str[][] = new char[numRows][s.length()];
            int k=0;
            //做初始化工作
            for (int i = 0; i < numRows; i++) {
                for (int j = 0; j < s.length(); j++) {
                    str[i][j] ='0';
                }
            }
            for (int j = 0; ; j++) {
                for (int m = 0; m < numRows; m++) {
                    if(k==s.length()){
                        break;
                    }
                    //填充每一列数据【满】
                    str[m][2*j]=s.charAt(k++);
                }
                //填充稀疏列数据
                for (int n = numRows-2; n >0; n--) {
                    if(k==s.length()){
                        break;
                    }
                    str[n][2*j+1]=s.charAt(k++);
                }
                //必须写 否则下述代码不能用
                if(k==s.length()){
                    break;
                }
            }
            
            //StringBuffer string=new StringBuffer(); time is longer
            String string="";
            for (int p = 0; p < numRows; p++) {
                for (int q = 0; q < s.length(); q++) {
                    if (str[p][q]!='0') {
                         //拼接非0字符
                        //string.append(str[p][q]);
                        string+=str[p][q];
                    }
                }
            }
            //return string.toString();
            return string;
        }
    

    注意:

    1.考虑到输出的顺序,其实斜行处理时可以作为一竖行。
    2.StringBuilder与StringBuffer与String的比较:
    A:运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String【String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,】;
    B:在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的;
    C:总结一下,String:适用于少量的字符串操作的情况、StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况、StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。

    相关文章

      网友评论

          本文标题:6.Z字形变换

          本文链接:https://www.haomeiwen.com/subject/tceacqtx.html