Num 6 Z字形变换
注意点:
1、空和1需要特判
2、斜着的是反的,越往上编号越大
3、可能会出现long和short不满的情况,每行写的时候注意,要带着判断
4、longs和shorts分别代表竖行和横行数数量
class Solution { public: string convert(string s, int numRows) { if(numRows==1) return s; int len=s.length(); int longs,shorts; int temp=len%(2*numRows-2); //cout<<"temp:"<<temp<<endl; if(temp<=numRows) { if(temp==0) { longs=len/(2*numRows-2); shorts=len/(2*numRows-2); } else { longs=len/(2*numRows-2)+1; shorts=len/(2*numRows-2); } } else{ longs=len/(2*numRows-2)+1; shorts=len/(2*numRows-2)+1; } //cout<<"longs:"<<longs<<"shorts:"<<shorts<<endl; string ans; for(int i=0;i<numRows;i++) { if(i==0||i==numRows-1){ for(int j=0;j<longs;j++) { if(((2*numRows-2)*j+i)<len) ans.push_back(s[(2*numRows-2)*j+i]); } } else { for(int j=0;j<longs;j++) { //cout<<"J:"<<j<<" "<<s[(2*numRows-2)*j+i]<<endl; if(((2*numRows-2)*j+i)<len) ans.push_back(s[(2*numRows-2)*j+i]); if(j<shorts && ((2*numRows-2)*j+(2*numRows-i-2))<len) ans.push_back(s[(2*numRows-2)*j+(2*numRows-i-2)]); } } } return ans; } };
这个题还有一个方法是每一行开一个数组,然后根据遍历加内容,看了一下应该不如现在的方法,不写了。