链接: https://oj.leetcode.com/problems/zigzag-conversion/
题意为:把字符串按如下规则排列
A | G | M | ||||
B | F | H | L | N | ||
C | E | I | K | : | ||
D | J | : |
输出按行顺序:AGMBFHLNCEIKDJ
剩下的就是通过字符的坐标计算在字符串中的位置了
class Solution { public: string convert(string s,int nRows) { string ans; if(s.empty()) return ans; if(nRows==1) return s; int n=nRows*2-2; int tem=s.length()%n; int ncols=(s.length()/n)*2; if(tem>=nRows) ncols+=2; // 计算占的列数 if(tem<nRows&&tem!=0) ncols+=1; if(s.length()<=nRows) return s; for(int i=0;i<nRows;i++) { for(int j=0;j<ncols;j++) { if((i==0||i==nRows-1)&&j%2==1) //短格空白,跳过 continue; if(j%2==1) { tem=(j-1)/2*n+nRows-1+(nRows-2)-i+1; if(tem>=s.length()) continue; ans+=s[tem]; } else { tem=j/2*n+i; if(tem>=s.length()) continue; ans+=s[tem]; } } } return ans; } };