6 Z字形變換

2021-08-25 02:24:39 字數 1511 閱讀 2028

一、題目

將字串"paypalishiring"以z字形排列成給定的行數:

p   a   h   n

a p l s i i g

y i r

之後從左往右,逐行讀取字元:"pahnaplsiigyir"

實現乙個將字串進行指定行數變換的函式:

string convert(string s, int numrows);
示例 1:

輸入:s = "paypalishiring", numrows = 3輸出:"pahnaplsiigyir"
示例 2:

輸入:s = "paypalishiring", numrows = 4輸出:"pinalsigyahrpi"解釋:p     i    n

a l s i g

y a h r

p i

二、思路

要得到解釋後的二維數constr[numrows][len]; len未知的情況下,找規律

len = s.length()/ (2*numrows - 2) * (numrows - 1); 

解釋一下將乙個有完整列的如:payp這一列到ishi這一列,有 numrows - 2個字元,加上完整的一列則為 2*numrows -2個字元 而這種規律遞進的行長為 numrows - 1, 當然 len != s.length() / 2; 計算機運算取整!! 

當然還有不規律的,如最後的ng這一列,其判讀 otherstr = s.length()% (2*numrows - 2) 

判斷他的列數進行相加得到最後的len 那麼接下來就填充再取出就好了 

三、**

public class leetcode6 

public static string convert(string s, int numrows)

len = len + otherlen;

char constr = new char [numrows][len];

int k = 0 , l ,i = 0,j = 0;

while(k < s.length())

//像右推進一列,行數回歸到非完整的起始行

j++; i = numrows - 2;

//填充非完整的列

for(int z = numrows - 2;z > 0;z--)}}

stringbuilder changedstr = new stringbuilder() ;

for( i = 0 ; i < numrows ; i++)}}

return new string(changedstr);

}}

四、總結

6 Z字形變換

將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r 之後從左往右,逐行讀取字元 pahnaplsiigyir 示例1 輸入 s paypalishiring numrows 3 輸出 pahnaplsiigyir 示例 2 輸入 s...

6 Z 字形變換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedh...

6 Z 字形變換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiiged...