您的位置:首页 > 其它

leetcode ZigZag Conversion

2014-03-27 11:01 148 查看
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 <string>
#include <algorithm>
using namespace std;

string convert(string s, int nRows){
  if(nRows == 1) return s;
string res = "";
int distance = 2*nRows-2,length = s.length();
for(int i = 0; i  < nRows; ++ i){
for(int j = 0 ; distance*j+i < length; ++ j ){
res+=s[distance*j+i];
int next = distance*j + i + distance-2*i;
if( (i!=0) && (i!=nRows-1) && next < length) res +=s[next];
}
}
return res;
}

int main(){
cout<<convert("PAYPALISHIRING", 3)<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: