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 };

 

posted @ 2020-03-15 18:14  Jinxiaobo0509  阅读(128)  评论(0)    收藏  举报