题目: 将字符串转化成zigzag模式。
例如 "abcdefghijkmlnpq"
当为4行,zigzag模式为:
a g l b f h m n c e i k p d j q 输出为aglbfhmnceikpdjq 当为5行,zigzag模式为: a i b h j q c g k p d f l n e m 输出为aibhjqcgkpdflnem思路:以题目中当行为4的为例,将字符串"abcdefghijkmlnpq" 首先转换为"abcd/fe/ghij/km/lnpq".其实/代表空格。这样最后的输出就从以span=4,从j=0开始a/g/l. 再从j=1开始bfhmn,...,一直到j=4,d/j/q.其中去掉/。
所以首先需要将原字符串转换为用空格填充的字符串。从上面的例子可以看出规则。首先是numRows个字符为一列,然后numRows-2个字符为反序的一列,其上下各有一个空格。
1 class Solution { 2 public: 3 string convert(string s, int numRows) { 4 int i=0,k=0,j; 5 int len=s.length(); 6 string ss=""; 7 int flag=0; 8 while(i0&&j--){12 ss+=s[i++];13 }14 while(j>0&&j--){15 ss+=' ';16 }17 flag=2;18 }19 else {20 ss+=' ';21 string temp="";22 while(i 0&&j--){23 temp+=s[i++];24 }25 std::reverse(temp.begin(),temp.end()); 2627 while(j>0&&j--){28 ss+=' ';29 }30 ss+=temp;31 ss+=' ';32 flag=0;33 }34 }35 string s1="";36 k=ss.length();37 for(i=0;i
leetcode上运行时间为 24ms