力扣(leetcode):Z字形变换
Z字形变换 题目: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 Iuput: s = “PAYPALISHIRING”, numRows = 3 Output: “PAHNAPLSIIGYIR” 解释: P I N A L S I G Y A H R P I
思路:按Z字排列,就是要把原来按序排列的字符串变成另一种规律存起来,然后输出,找规律,我们找一个周期,例如PAYPAL看成一个周期,而周期长度,刚好是numRows*2 - 2。然后我们做一表看的更清楚。第一行是原来的位置,后一行是转为“Z"的位置。
我们可以看到以六为周期,大于四,也就是numRows就是递减的,小于四,就是余数。所以,我们可以每一行用一个串来存,按规律存入后。再一一拼接。
class Solution {
public String convert(String s, int numRows) {
if(numRows == 1)
return s;//返回原串
String []stringArray = new String[numRows];
Arrays.fill(stringArray,"");//初始化String类
int period = numRows*2 - 2;
//遍历原串,将每行字符输入进news中
for(int i = 0;i < s.length();i++)
{
int mod = i % period;
if(mod < numRows)
{
stringArray[mod] += s.charAt(i);
}
else
{
stringArray[period - mod] += s.charAt(i);
}
}
//整合每一个String类
StringBuffer result = new StringBuffer();
for(String t:stringArray)
{
result.append(t);
}
return result.toString();
}
}
参考于力扣题解的一个视频讲解,然后,其中的代码有个Array后忘记加了个s。
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
Python高级培训第二次作业
