java z+_Java Z 字形变换
– 題目:Z 字形變換
將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。
比如輸入字符串為 “LEETCODEISHIRING” 行數為 3 時,排列如下:
L C I R
E T O E S II 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
– 半個暴力法(直接將整個字符串劃分為n個2numRows-2 長度的字符串,然后循環讀取,最差情況大概是 nnunRows)
//說是有點暴力,但實際上還是可以的,比官方題解快一點點,速度超越大概85%的人還算可以了,空間超過50%的人,應該還可以改進一點點
//最大的缺點大概是代碼有點長,考慮的情況有點多,調試花了比較長時間
class Solution {
public String convert(String s, int numRows) {
if(s.length()<=numRows||numRows==1)
return s;
int n=s.length()/(2*numRows-2)+(s.length()%(2*numRows-2)==0?0:1);
String[] strs=new String[n];
StringBuilder result = new StringBuilder();
for(int i=0;i
if(2*(i+1)*(numRows-1)>=s.length())
strs[i]=s.substring(2*i*(numRows-1),s.length());
else
strs[i]=s.substring(2*i*(numRows-1),2*(i+1)*(numRows-1));
}
for(int j=0;j
if(j==0){
for(int k=0;k
result.append(strs[k].substring(0,1));
}
}
else if(j==numRows-1){
for(int k=0;k
if(strs[k].length()>=numRows)
result.append(strs[k].substring(numRows-1,numRows));
}
}
else{
for(int k=0;k
if(strs[k].length()>j){
result.append(strs[k].substring(j,j+1));
if(strs[k].length()>2*numRows-j-2)
result.append(strs[k].substring(2*numRows-j-2,2*numRows-j-1));
}
}
}
}
return result.toString();
}
}
– 規律公式法(這個方法很好寫,也很好記,強烈推薦)
//用時比上一個增加10ms左右,不過這個是真好寫,而且超容易調試
class Solution {
public String convert(String s, int numRows) {
if(s.length()<=numRows||numRows==1)
return s;
StringBuilder result = new StringBuilder();
for(int i=0;i
if(i==0){
for(int j=0;j
result.append(s.charAt(j));
}
else if(i==numRows-1){
for(int j=numRows-1;j
result.append(s.charAt(j));
}
else{
for(int j=i;j
result.append(s.charAt(j));
if(j+2*numRows-2-2*i
result.append(s.charAt(j+2*numRows-2-2*i));
}
}
}
return result.toString();
}
}
總結
以上是生活随笔為你收集整理的java z+_Java Z 字形变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java timer 线程安全_多线程之
- 下一篇: 几天后自动领取java怎么做的_java