解讀本題第一想法肯定是遍歷陣列,但是如何控制陣列向下走和向前走是問題所在關鍵。這裡我們將每一行看作乙個rows [i](rows 是乙個字串陣列)
圖中為例項答案,是乙個rows[4]的陣列,rows[0]=ldr,rows[1]=eoeii,
根據上圖,我們已得知解題思路,但是難以控制的是空格字元如何判斷。這裡採用boolean down=false控制字串遍歷時,當down=false的時候,字串向前走,當down=true的時候,字串向下走。通過判斷條件index= =0||index= =numsrow-1時,則down=true。
當down的true時,向下走,如何去控制0
public
class
solution
// length為rows陣列的最大長度
int length = math.
min(chars.length, numrows)
;//定義乙個rows陣列,用來存放rows[行]的資料
//該題解題思路為將每一行都看作是陣列中的一行字串,
//例如 z "" "" s 為第一行,則rows[0]="zs";
// f s v m 為第二行,則rows[1]=fsvm;
//最後定義乙個字串ans遍歷rows:ans+=rows[i]則為題意所需拼接字串。
string[
] rows =
newstring
[length]
;//在使用rows陣列時,必須先將其設定為「」,否則其內容為null,會報空指標異常
for(
int i =
0; i < length; i++
)//設定down為false,第乙個元素永遠為rows[0],從第二個元素可判斷down來確定遍歷走向
boolean down =
false
;// down為true時index+1,down為false時index-1
int index =0;
for(
int i =
0; i < chars.length; i++
)//down為true時,index+=1,down為false時index+=-1
index += down ?1:
-1;}
string ans ="";
for(
int i =
0; i < rows.length; i++
)return ans;
}}
06 Z 字形變換
這道題目在解題時關鍵是要弄清楚 z字形排列 是怎麼一回事,僅僅根據numrow為3的情況可能看的不會 太明顯,把行數為4和行數為3的情況,做乙個對比,更容易找到解題思路。1 當不考慮對角線上的元素時,完成可以看成是數字是一列一列的跳轉,且跳轉距離為numrow 2 2 2 再去考慮計算對角線的元素的...
06 Z字形變換
題目好像開始越來越難了,這道題一開始毫無頭緒,只知道了每一行用乙個slice,然後依次把字元放進slice中,然後突然發現好像可以找規律,如果分成n行,那麼每乙個迴圈都是2n 2個元素,這道題最重要的就是要知道字元應該放在哪個slice裡面。假如要分成4行,那麼一次包括 tmp 2 4 2 6個元素...
06Z字形變換
參考文獻 將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。example 輸入字串為 leetcodeishiring 行數為 3 時,排列如下 return l c i r e t o e s i i g e d h n 按行排序 通過從左向右迭代字串,我們可以輕鬆地確定字元...