OJ练习第23题——Z字形变换
创始人
2024-02-17 21:12:59
0

OJ练习第23题——Z字形变换

    • 题目要求
    • 示例
    • Java代码如下:
    • 思路分析

力扣链接:Z字形变换

题目要求

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);

示例

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

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

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

输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

Java代码如下:

class Solution {public String convert(String s, int numRows) {int len = s.length();StringBuilder res = new StringBuilder();res.append(s.charAt(0));int x;if(numRows == 1) {return s;}else {x = 2 + 2 * (numRows - 2);}for(int j = 0;j < numRows; j++) {for(int i = 0; i * x - j < len;i++) {if(i * x - j > 0 && j < numRows - 1) {res.append(s.charAt(i * x - j));}if(j > 0 && i * x + j < len) {res.append(s.charAt(i * x + j));}}}return res.toString();}
}

思路分析

上面这段Java代码是采用直接拼接的方法,一步到位。
1、由于题目明确提示给定字符串长度最小为1,因此不必考虑字符串为空的情况,只单独列出当字符串只有一个字符时,直接返回s。
2、本题思路时直接找规律的方法,将按Z字形划分成组。以示例为例,如下图所示:
请添加图片描述
上图是numRows为3,再看下图为numRows为4:
请添加图片描述
x就代表每一组里面字符个数。
每一组里面,除了第一行和最后一行,中间每行会有两个字符,
第一行和最后一行肯定是只有一个字符,一共就是2。
所以:

x = 2 + 2 * (numRows - 2);

所以下面的两个for循环也就是按照这个规律直接将原字符串中的字符拿出来组合成一个新的字符串。请添加图片描述

相关内容

热门资讯

代驾纠纷 代驾时撞伤行人、车辆发生故障…… 这些都和车主无关,应由代驾赔偿? 观点: 使用代驾服务并非将所有...
公司股东与妻子分居期间出轨女下... 近日据报道,宁夏永宁县人民法院一审查明公司股东李某乙在与妻子李某甲分居期间,与公司女员工马某某存在不...
动物学家、律师和创作者,Thi... 12月21日,以“一起·了不起”为主题的2025 ThinkPad黑FUN礼在京举办。活动现场,律师...
徐奇渊:扩内需与对外政策紧密相... 近日,中国海关总署发布了一组数据令人关注:2025年前11个月,我国货物贸易顺差达到1.08万亿美元...
46岁上海独居女子不幸离世,官... 居住在上海虹口区46岁的蒋女士因突发脑溢血于今年10月入院,远亲吴先生与其公司共同垫付了医药费,但她...
威海市汽车以旧换新补贴政策调整... 根据稳妥有序开展消费品以旧换新工作统一部署,经研究决定,对我市汽车以旧换新补贴政策进行调整。现将有关...
动物学家、律师、创作者都pic... 12月21日,在2025 ThinkPad黑FUN礼现场,三名专业领域用户用真实案例诠释了Think...
从拒赔到和解:涉外货运保险理赔... 近日,国家金融监管总局、最高人民法院遴选出6个具有典型性、示范性的金融领域纠纷多元化解案例,12月1...
湖北大冶一男子当街拦车砸玻璃,... 大象新闻2025-12-21 16:21:41 12月20日,湖北大冶市网民发视频称,一名男子在新冶...