本题告诉我们,对于sort的重定义函数,应该要写在类外面,否则会报错。
// sort pair
bool cmp(const pair<int,int>& a, const pair<int,int>& b) {
if (a.first<b.first){
return true;
}
else if (a.first>b.first){
return false;
}
else{
if (a.second<b.second){
return true;
}
else{
return false;
}
}
}
class Solution {
public:
string convert(string s, int numRows) {
if (numRows==1){return s;}
map<pair<int,int>, char> res;
int index = 0;
int nowi=0;
int nowj=0;
while(index<s.size()){
for(int j=0;j<numRows;j++){
pair<int, int> temp(nowi+j, nowj);
if (index<s.size()){
res[temp] = s[index++];
//cout<<temp.first<<" "<<temp.second<<" "<<s[index-1]<<endl;
}
}
nowi = nowi + numRows-1;
nowj = nowj;
for(int j=1;j<numRows-1;j++){
pair<int, int> temp(nowi-j, nowj+j);
if (index<s.size()){
res[temp] = s[index++];
//cout<<temp.first<<" "<<temp.second<<" "<<s[index-1]<<endl;
}
}
nowi = 0;
nowj = nowj + numRows-1;
}
// sort pairs
vector<pair<int, int>> indexes;
for (auto it = res.begin();it!=res.end();it++){
indexes.push_back(it->first);
}
sort(indexes.begin(), indexes.end(), cmp);
string result="";
for(int i=0;i<indexes.size();i++){
result += res[indexes[i]];
}
return result;
}
};
zeroQiaoba
发布了359 篇原创文章 · 获赞 18 · 访问量 14万+
私信
关注