码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode小白刷题之旅----6. ZigZag Conversion

时间:2021-01-27 13:14:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:like   write   for循环   amp   fixed   找规律   spl   pat   wan   

仅供自己学习

 

题目:

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 s, int numRows);

 

思路:

题目很简单,有两种思路。

1.找规律,按照规律传值到新字符串中。将字符串的位置按照题目要求的排列,可知每相邻两列的元素index相差 2(numRows-1),而Z字中间的的数遵循规律 j +2(numRows-1)-2*i,j是该中间的元素 左边元素的index。

 

代码:

 1 class Solution {
 2 public:
 3     string convert(string s, int numRows) {
 4         if (numRows <= 1) return s;
 5         string str;
 6         int len= 2 * numRows - 2, n = s.size();
 7         for (int i = 0; i < numRows; ++i) {
 8             for (int j = i; j < n; j += len) {  //一行一行的传值
 9                 str+= s[j];  //对Z字竖着的那列传值
10                 int pos = j + len - 2 * i;  //计算Z字斜着的元素index
11                 if (i != 0 && i != numRows - 1 && pos < n) str += s[pos]; //行数不为首行和最后一行就进行Z斜着的元素进行传值。
12             }
13         }
14         return str;
15     }
16 };

 

2.用vector创建行数为numRows的向量。将s中的元素 按题目要求的传入。

代码:

 1 class Solution {
 2 public:
 3     string convert(string s, int numRows) {
 4         if(numRows ==1) return s;
 5         string str;
 6         int n =s.size();
 7         int i=0;
 8         vector<string> temp(numRows);
 9         while(i<n){
10             for(int pos=0;pos<numRows&&i<n;++pos){  //按行向下加入竖列的元素
11                 temp[pos]+=s[i++];
12             }
13             for(int pos=numRows-2;pos!=0&&i<n;--pos){ //在有斜列的行的字符串加入斜列元素。因为从下往上第一个有斜列元素的行数为numRows-2.
14                 temp[pos]+=s[i++];
15             }
16         }
17         for(auto &a:temp) str+= a;  //将temp的元素传给a,类似for循环传值。
18         return str;
19     }
20 };

 

leetcode小白刷题之旅----6. ZigZag Conversion

标签:like   write   for循环   amp   fixed   找规律   spl   pat   wan   

原文地址:https://www.cnblogs.com/Mrsdwang/p/14328193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!