The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" P A H N A P L S I I G Y I R Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" P I N A L S I G Y A H R P I
Solution
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
int n = s.size();
if (n == 1 || numRows < 2 || n <= numRows) return s;
string ans;
for (int i = 0; i < numRows; i++) {
int j = i;
ans.push_back(s[i]); // First character of the row
int down = 2 * (numRows - 1 - i); // Downward step size
int up = 2 * i; // Upward step size
if (up == 0 && down == 0) return s; // If no movement, just return the string
while (j < n) {
j += down;
if (j < n && down > 0) ans.push_back(s[j]);
j += up;
if (j < n && up > 0) ans.push_back(s[j]);
}
}
return ans;
}
};
int main() {
Solution solution;
string s = "PAYPALISHIRING"; // Example input
int numRows = 3; // Example row count
string result = solution.convert(s, numRows);
cout << "Zigzag Conversion: " << result << endl; // Output the result
return 0;
}