text: // Source : https://oj.leetcode.com/problems/zigzag-conversion/
  // Author : Hao Chen
  // Date   : 2014-07-17
  
  /********************************************************************************** 
  * 
  * 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".
  * 
  *               
  **********************************************************************************/
  
  #include <iostream>
  #include <vector>
  #include <string>
  using namespace std;
  
  string convert(string s, int nRows) {
      //The cases no need to do anything
      if (nRows<=1 || nRows>=s.size()) return s;
       
      vector<string> r(nRows);
      int row = 0;
      int step = 1;
      for(int i=0; i<s.size(); i ++) {
          if (row == nRows-1) step = -1;
          if (row == 0) step = 1;
          //cout << row <<endl;
          r[row] += s[i];
          row += step;
      }
      
      string result;
      for (int i=0; i<nRows; i++){
          result += r[i];
      }
      return result;
  }
  
  int main(int argc, char**argv){
  
      string s;
      int r;
  
      s = "PAYPALISHIRING";
      r = 3;
      cout << s << " : " << convert(s, 3) << endl;
  
  }
  