北京免费网站建设,助邦建筑工程网,re安装wordpress,给网站做数据分析一、题目描述将一个给定字符串 s 根据给定的行数 numRows #xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 PAYPALISHIRING 行数为 3 时#xff0c;排列如下#xff1a;P A H NA P L S I I GY I R之后#xff0c;你的输出需要从左往右逐行读…一、题目描述将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 PAYPALISHIRING 行数为 3 时排列如下P A H NA P L S I I GY I R之后你的输出需要从左往右逐行读取产生出一个新的字符串比如PAHNAPLSIIGYIR。请你实现这个将字符串进行指定行数变换的函数string convert(string s, int numRows); 示例 1输入s PAYPALISHIRING, numRows 3输出PAHNAPLSIIGYIR示例 2输入s PAYPALISHIRING, numRows 4输出PINALSIGYAHRPI解释P I NA L S I GY A H RP I示例 3输入s A, numRows 1输出A来源力扣LeetCode链接https://leetcode.cn/problems/zigzag-conversion著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。二、运行结果三、解题思路用一个比较直观的方式使用一个列表来保存按N字形排列的每一行的字符然后将每一行连接起来列表的每一项都是一个字符串遍历字符串的每个字符将每个字符加到对应排列好的行的末尾当转到第1行和第numRows行的时候使用一个标志变量flag来改变方向。将字符串的每一个字符加入到对应的行之后再将列表中的每个字符串按序连接起来即可。四、AC代码class Solution {public String convert(String s, int numRows) {if(numRows 2) return s;ListStringBuilder lines new ArrayListStringBuilder();for(int i0; inumRows; i) lines.add(new StringBuilder());int row0, flag -1;//行号, 标记方向for(char c : s.toCharArray()){lines.get(row).append(c); //将每个字符加到对应行字符串后面if(row0 || row numRows-1) flag -flag; //反转方向row flag;}StringBuilder ans new StringBuilder();for(StringBuilder sb : lines){ //连接每一行ans.append(sb);}return ans.toString();}
}