leecode刷題學習 06 Z字形變換

2021-10-10 00:22:52 字數 1440 閱讀 9963

解讀本題第一想法肯定是遍歷陣列,但是如何控制陣列向下走和向前走是問題所在關鍵。這裡我們將每一行看作乙個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 按行排序 通過從左向右迭代字串,我們可以輕鬆地確定字元...