(字串)ZigZag Conversion

Kobe10發表於2017-02-04

【解析】

第一次看到這個題目的人,可能不知道ZigZag是什麼意思,簡單解釋一下,就是把字串原順序012345……按下圖所示排列:

 

 

發現所有行的重複週期都是 2 * nRows - 2

對於首行和末行之間的行,還會額外重複一次,重複的這一次距離本週期起始字元的距離是 2 * nRows - 2 - 2 * i


    1. class Solution {  
    2. public:  
    3.     string convert(string s, int nRows) {  
    4.         // Start typing your C/C++ solution below  
    5.         // DO NOT write int main() function  
    6.         string result;  
    7.         if (nRows < 2) return s;  
    8.         for (int i = 0;i < nRows;++i) {  
    9.             for (int j = i;j < s.length();j += 2 * (nRows - 1)) {  
    10.                 result.push_back(s[j]);  
    11.                 if (i > 0 && i < nRows - 1) {  
    12.                     if (j + 2 * (nRows - i - 1) < s.length())  
    13.                         result.push_back(s[j + 2 * (nRows - i - 1)]);  
    14.                 }  
    15.             }  
    16.         }  
    17.         return result;  
    18.     }  
    19. }; 

相關文章