6. Z 字形变换
1 //找规律题 等差数列 2m-2 2 class Solution 3 { 4 public: 5 string convert(string s, int m) 6 { 7 if(m == 1) return s; 8 int n = s.size(); 9 string res; 10 for(int i = 0;i < m;i ++) 11 { 12 if(i == 0 || i == m-1) 13 { 14 for(int k = 0;k <= n/m;k ++) 15 { 16 int temp = i + k*(2*m-2); 17 if(temp >= n) break; 18 res.push_back(s[temp]); 19 } 20 } 21 else 22 { 23 int a1 = i; 24 int b1 = 2*m-2-i; 25 for(int k = 0;k <= n/m;k ++) 26 { 27 int temp1 = a1 + k*(2*m-2); 28 if(temp1 >= n) break; 29 res.push_back(s[temp1]); 30 31 int temp2 = b1 + k*(2*m-2); 32 if(temp2 >= n) break; 33 res.push_back(s[temp2]); 34 } 35 } 36 } 37 return res; 38 } 39 };
1 class Solution 2 { 3 public: 4 string convert(string s, int n) 5 { 6 if(n == 1) return s; 7 string res; 8 for(int i = 0;i < n;i ++) 9 { 10 if(i == 0 || i == n - 1) 11 { 12 int d = 0,a0 = i,an = i; 13 while(an < s.size()) 14 { 15 res.push_back(s[an]); 16 d ++; 17 an = a0 + (2*n - 2) * d; 18 } 19 } 20 else 21 { 22 int d1 = 0,a0 = i,an = i; 23 int d2 = 0,b0 = 2*n-2-i,bn = 2*n-2-i; 24 while(an < s.size() && bn < s.size()) //交替执行 25 { 26 res.push_back(s[an]); 27 d1 ++; 28 an = a0 + (2*n - 2) * d1; 29 30 res.push_back(s[bn]); 31 d2 ++; 32 bn = b0 + (2*n - 2) * d2; 33 } 34 35 if(an < s.size()) //有可能执行的这一行为奇数个 36 { 37 res.push_back(s[an]); 38 d1 ++; 39 an = a0 + (2*n - 2) * d1; 40 } 41 } 42 } 43 return res; 44 } 45 };
Mamba never out

浙公网安备 33010602011771号