力扣6. Z 字形变换

打印 上一主题 下一主题

主题 1823|帖子 1823|积分 5469

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
  比如输入字符串为 "AYPALISHIRING" 行数为 3 时,排列如下:
  1. P   A   H   N
  2. A P L S I I G
  3. Y   I   R
复制代码
   之后,你的输出必要从左往右逐行读取,产生出一个新的字符串,比如:"AHNAPLSIIGYIR"。
  
示例 1:
  1. <strong>输入:</strong>s = "PAYPALISHIRING", numRows = 3
  2. <strong>输出:</strong>"PAHNAPLSIIGYIR"
复制代码
示例 2:
  1. <strong>输入:</strong>s = "PAYPALISHIRING", numRows = 4
  2. <strong>输出:</strong>"PINALSIGYAHRPI"
  3. <strong>解释:</strong>
  4. P     I    N
  5. A   L S  I G
  6. Y A   H R
  7. P     I
复制代码
示例 3:
  1. <strong>输入:</strong>s = "A", numRows = 1
  2. <strong>输出:</strong>"A"
复制代码

代码:
  1. class Solution {
  2. public:
  3.     string convert(string s, int numRows) {
  4.         string word[numRows];
  5.         int flag = 0, row = 0;
  6.         string res;
  7.         for(int i = 0; i < s.size(); i++){
  8.             
  9.             word[row] += s[i];
  10.             if(numRows == 1){
  11.                 continue;
  12.             }
  13.             if(flag == 0){
  14.                 row++;
  15.             }
  16.             else{
  17.                 row--;
  18.             }
  19.             if(row == numRows-1){
  20.                 flag = 1;
  21.             }
  22.             if(row == 0){
  23.                 flag = 0;
  24.             }
  25.         }
  26.         for(int i = 0; i < numRows; i++){
  27.             res += word[i];
  28.         }
  29.         return res;
  30.     }
  31. };
复制代码

   解题思路:
  (1)创建一个巨细为 numRows 的 string 数组。
  (2)每次将字母放到对应 string 数组元素的后面。
  (3)将数组中的 string 全部加在一起。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表