Zigzag Conversion

Jin Shang bio photo By Jin Shang

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 s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P     I    N
A   L S  I G
Y A   H R
P     I

Solution:

Simple implementation: compute the conversion formula

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows==1) return s;
        string ans;
        int d = (numRows-1)*2;
        for(int i=0;i<numRows;i++){
            int j = i;
            while(j<s.size()){
                ans+=s[j];
                if(j%d!=0&&j%d!=numRows-1){
                    if(j/d*d+(d-(j%d))<s.size()){
                        ans+=s[j/d*d+(d-(j%d))];
                    }
                }
                j+=d;
            }
        }
        return ans;
    }
};