LeetCode 6 Z字形變換

2021-08-24 17:23:11 字數 2473 閱讀 8986

把整個問題拆解為: 儲存-取 的兩個過程;

通過觀察我發現的是,當numrows為3時,兩列之間的數字的數目為1;當numrows為4時,兩列之間的數字的數目為2,以此類推。那麼,可不可以將每一列都存起來(col),兩列之間的數字也存起來(gap),最後要輸出時再通過遍歷的方式拼接出結果呢?

以題目中給的字串paypalishiring為例子,將每一列(col)和它右邊的兩列之間的數字(gap)作為一組:

儲存完為:

乙個需要注意的問題

乙個需要注意的問題是,有可能在遍歷完輸入的字串的時候,沒有來得及儲存當前的子陣列,這個時候可以通過引入乙個遍歷,在迴圈外補充最後一次的儲存操作(詳見**);

取首尾兩行

那麼,接下來,可以先取首行和尾行的字串拼接成headtail,因為首尾兩行是不涉及兩列之間的資料的,由上圖就可以知道:

首尾兩行也就是二維陣列col中,每乙個子陣列的第乙個元素即為首,最後乙個元素即為尾;

取中間的行

如果要取中間的行,就會發現其實上面中,那樣儲存時,gap這個是錯的,因為,在儲存時,是按照原來字串的字元順序儲存的,比如gap的第乙個子陣列['a', 'l'],但是,在得出結果時,是先遍歷得到第二行的l,然後才是第三行的a。因此,在儲存gap的時候,需要對每個子陣列進行逆序操作,正確的儲存結果應該為:

遍歷出第二行的結果為:alsig, 第三行結果為:yahr

string chartostr(char c)

string convert(string s, int numrows)

int s_sz = s.size();

if (s_sz == 0 || s_sz == 1)

return s;

/// 儲存的過程

int gap_num = numrows - 2; // numrows:3,gap_num:1

// numrows:4,gap_num:2

// 3 1 3 1 3 1 ; 每乙個3代表了含有三個資料的陣列,如[pay]

vector

> col; // 儲存每一列的資料,如[pay] [ali] [hir]

vector

> gap; // 儲存列與列之間的資料,如[p] [s] [i]

vector

tmp_col(numrows);

vector

tmp_gap(gap_num);

int flag = 0; // 有可能出現i==s_sz,但是沒有儲存對應的tmp_col和tmp_gap的情況

for (int i = 0, j = 0, m = 0, n = 0; i < s_sz; )

else

else}}

if (flag == 0)

/// 取字元的過程

// 空的部分為'\0',不進行處理

int set_num = s_sz / (numrows + gap_num); // 組數,不包括多餘的

if (s_sz % (numrows + gap_num) != 0)

set_num += 1;

//先取出首尾兩行

string head = "", tail = "";

for (int i = 0; i < set_num; i++)

if (col[i][numrows - 1] != '\0')

}// 拼中間的

string mid = "";

for (int i = 1; i < numrows - 1; i++)

if (gap[j][i - 1] != '\0')}}

string res = head + mid + tail;

return res;

}

LeetCode 6 Z字形變換

將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 輸入 s pa...

leetcode 6 Z字形變換

將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 示例 1 輸入...

LeetCode 6 Z字形變換

題目鏈結 題目描述 將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numro...