6. Z 字形变换 leetcode
发布日期:2021-06-20 05:37:05
浏览次数:4
分类:技术文章
本文共 1431 字,大约阅读时间需要 4 分钟。
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:
L C I RE T O E S I I GE D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"
。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3输出: "LCIRETOESIIGEDHN"
示例 2:
输入: s = "LEETCODEISHIRING", numRows = 4输出: "LDREOEIIECIHNTSG"解释:L D RE O E I IE C I H NT S G
分析:
本题可以使用数学方法分析,可以直接推导出第i个字符的行和列数。但是推导需要时间并且短时间内公式不一定正确。所以我们采用模拟-输出的放法:模拟将字符按z字形排列,但是不存贮中间结果(每个字符的行列数)直接将字符放到对应行数的队列中,后期只需将所有行拼接在一起输出即可。
class Solution { public String convert(String s, int numRows) { Listlist = new ArrayList<>(); for (int i = 0; i < numRows; i++) { //每一行的字符存在一起 list.add(new StringBuilder()); } int rowNum =0; boolean up=false; //向上遍历 for (int i = 0; i < s.length(); i++) { if (up) list.get(rowNum--).append(s.charAt(i)); else if (!up) list.get(rowNum++).append(s.charAt(i)); rowNum = rowNum > numRows-1 ?numRows-1 : rowNum; //控制边界 rowNum = rowNum < 0 ? 0: rowNum; if (rowNum==0 || rowNum==numRows-1){ //更新遍历方向 up = rowNum==0 ?false:true; } } StringBuilder result = new StringBuilder(); //拼接结果 for (StringBuilder sb:list) { result.append(sb); } return result.toString(); }}
转载地址:https://blog.csdn.net/h2453532874/article/details/88363512 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月21日 15时59分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
scanf从文件中读入,printf写入到文件
2019-04-26
返回指针值的函数(1)
2019-04-26
返回指针值的函数(2)
2019-04-26
将若干字符串按字母顺序(由小到大)输出(用指针)
2019-04-26
指针部分,建立动态数组
2019-04-26
HDOJ 1005 Number Sequence
2019-04-26
排序算法简介及其C实现
2019-04-26
HDOJ1003Max Sum
2019-04-26
HDOJ2063过山车 匈牙利算法
2019-04-26
n个灯,k个人的开灯问题
2019-04-26
蛇形填数
2019-04-26
生成元
2019-04-26
HDOJ1002题A + B Problem II,2个大数相加
2019-04-26
环状序列
2019-04-26
枚举法
2019-04-26
HDOJ1019Least Common Multiple
2019-04-26
HDOJ1018Big Number
2019-04-26
POJ 1163 The Triangle
2019-04-26
HDOJ 1000 A + B Problem
2019-04-26
HDOJ 1001Sum Problem
2019-04-26