Leetcode 6 Z字形变换 java 9ms 击败95%

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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
//jump 是一次循环的长度 如4行为6 2n-2
//alias 是每个循环中离开始位置的偏移量

//之前一交代码 发现效率贼低 把ret从String改为StringBuilder效率就高了
class Solution {
    StringBuilder ret = new StringBuilder();
    public String convert(String s, int numRows) {
        if(numRows == 1)
            return s;
       int jump = 2*numRows -2;
        int len = s.length();
        for(int alias=0;alias<numRows;alias++){
            if(alias == 0 || alias == jump/2){
                for(int i =0+alias;i<len;i+=jump)
                    ret.append(s.charAt(i));
             }
            else{
                for(int i =0+alias;i<len;i+=jump){
                    ret.append(s.charAt(i));
                    if(i+jump-2*alias<len)
                        ret.append(s.charAt(i+jump-2*alias));
                    }
                }
            }
        return ret.toString();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目:6. Z字形变换 难度:中等 分类:字符串 解决方案:字符串遍历 今天我们学习第6题Z字形变换,这是一个字符...
    编程半岛阅读 3,499评论 0 1
  • 题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETC...
    LeeYunFeng阅读 4,485评论 0 50
  • 题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCOD...
    LonnieQ阅读 1,364评论 0 1
  • 今天跟朋友聊天,谈到去年体检的事情,最后她来了句“现在日子这么好过,如果身体不好那就亏了”,共鸣有没有! 还记得年...
    Tony恒阅读 1,481评论 0 0
  • 本文为转发,原文地址 golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。...
    动物园园长熊熊酱阅读 9,695评论 0 2

友情链接更多精彩内容