6. Z 字形变换

举报
海轰Pro 发表于 2022/08/31 14:32:44 2022/08/31
【摘要】 6. Z 字形变换题目将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:str...

6. Z 字形变换

题目

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。


比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P A H N

A P L S I I G

Y I R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。


请你实现这个将字符串进行指定行数变换的函数:


string convert(string s, int numRows);

 

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3

输出:"PAHNAPLSIIGYIR"


示例 2:

输入:s = "PAYPALISHIRING", numRows = 4

输出:"PINALSIGYAHRPI"

解释:

P I N

A L S I G

Y A H R

P I


示例 3:

输入:s = "A", numRows = 1

输出:"A"


提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',' 和 '.' 组成
  • 1 <= numRows <= 1000

解答(C++)

方法一【暴力】

思路:

  • 先创建一个二维数组
  • 然后模拟出z字形的轨迹 依次填充至二维数组
  • 最后顺序读取数组中的值
class Solution {
public:
    string convert(string s, int numRows) {
        int n = s.length();
        if(numRows == 1) return s;
        vector<vector<char>> arr(numRows, vector<char>(n,'*'));
        int index = 0;
        int i = 0;
        int j = 0;
        while(1) {
            while(i < numRows && index < n ) {
                arr[i][j] = s[index];
                ++index;
                ++i;
            }
            if(index >= n) break;
            --i;

            --i;
            ++j;

            while(i >= 1 && index < n) {
                arr[i][j] = s[index];
                ++index;
                --i;
                ++j;
            }
            if(index >= n) break;
        }
        string ans = "";
        for(int i = 0; i < numRows; ++i) {
            for(int j = 0; j < n; ++j) {
                if(arr[i][j] != '*') {
                    ans += arr[i][j];
                }
            }
        }
        return ans;
    }
};

解答(Python)

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。