這篇文章將為大家詳細講解有關leetcode中如何解決ZigZag Conversion問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務至上”的服務理念,堅持“二合一”的優(yōu)良服務模式,真誠服務每家企業(yè),認真做好每個細節(jié),不斷完善自我,成就企業(yè),實現(xiàn)共贏。行業(yè)涉及成都玻璃鋼雕塑等,在網(wǎng)站建設公司、網(wǎng)絡營銷推廣、WAP手機網(wǎng)站、VI設計、軟件開發(fā)等項目上具有豐富的設計經(jīng)驗。ZigZag Conversion
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I R
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
題意:
鋸齒形(Z字形)的變換。變換形式如下所示:
A)行數(shù)為兩行的情形: 0 2 4 1 3 6 B)行數(shù)為三行的情形: 0 4 8 1 3 5 7 9 2 6 10 C)行數(shù)為四行的情形: 0 6 12 1 5 7 11 13 2 4 8 10 14 3 9 15 D)行數(shù)為七行的情形: 第一行:0 12 24 第二行:1 11 13 23 25 第三行:2 10 14 22 26 第四行:3 9 15 21 27 第五行:4 8 16 20 28 第六行:5 7 17 19 29 第七行:6 18 30
觀察上面情形可知:
1)第一行和最后一行兩個元素之間的距離是:(行數(shù) - 1)* 2
2)中間幾行中第一個元素與第二個元素和第二個元素與第三個元素間的距離和是:(行數(shù) - 1)* 2.
3)中間幾行中第一個元素和第二個元素間的距離與第幾行的關系:(行數(shù)-第幾行)* 2.
4)中間幾行中第二個元素和第三個元素間的距離與第幾行的關系:(第幾行 - 1) * 2.
故有getIndex()函數(shù):
1)如果是每行的第一個元素,直接返回行數(shù)。
2)如果是第一行或者最后一行的除首元素外的下標獲?。呵耙粋€元素的下標 + (行數(shù) - 1)* 2
3)中間幾行的偶數(shù)列的下標獲取:前一元素的下標 + (行數(shù)-第幾行)* 2
4)中間幾行的奇數(shù)列的下標獲?。ǔ自兀呵耙辉叵聵?+ (第幾行 - 1) * 2
注:
程序中行數(shù)由于是從零開始的的,所以程序中會有相差一的出入。
int getIndex(int index, int cnt, int numRows, int flag) { if ( flag == 0 ) { return cnt; } else if ( cnt == 0 || cnt == numRows - 1 ) { index = index + ( numRows - 1) * 2; } else if ( flag % 2 != 0 ) { index = index + (numRows - 1 - cnt) * 2; } else if ( flag % 2 == 0 ) { index = index + cnt * 2; } return index; } char* convert(char* s, int numRows) { if ( *s == '\0' || numRows == 1 ) { return s; } int len = strlen(s); if ( len <= numRows ) { return s; } int add = 0; char rest[len + 1]; int cnt = 0; for ( cnt = 0; cnt < numRows; cnt++ ) { int index = 0; int flag = 0; index = getIndex(index, cnt, numRows, flag); while ( index < len ) { rest[add] = *(s + index); add += 1; flag += 1; index = getIndex(index, cnt, numRows, flag); } } rest[len] = '\0'; sprintf(s, "%s", rest); return s; }
逐行讀取每個元素,存入rest結果集中。最后寫會s,防止出現(xiàn)局部數(shù)組返回。
關于“l(fā)eetcode中如何解決ZigZag Conversion問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。