首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 2075. 解码斜向换位密码(模拟)

LeetCode 2075. 解码斜向换位密码(模拟)

作者头像
Michael阿明
发布2022-01-07 10:59:05
发布2022-01-07 10:59:05
7750
举报

文章目录

1. 题目

字符串 originalText 使用 斜向换位密码 ,经由 行数固定 为 rows 的矩阵辅助,加密得到一个字符串 encodedText 。

originalText 先按从左上到右下的方式放置到矩阵中。

先填充蓝色单元格,接着是红色单元格,然后是黄色单元格,以此类推,直到到达 originalText 末尾。 箭头指示顺序即为单元格填充顺序。所有空单元格用 ' ' 进行填充。 矩阵的列数需满足:用 originalText 填充之后,最右侧列 不为空

接着按行将字符附加到矩阵中,构造 encodedText

先把蓝色单元格中的字符附加到 encodedText 中,接着是红色单元格,最后是黄色单元格。箭头指示单元格访问顺序。

例如,如果 originalText = "cipher"rows = 3 ,那么我们可以按下述方法将其编码:

蓝色箭头标识 originalText 是如何放入矩阵中的,红色箭头标识形成 encodedText 的顺序。在上述例子中,encodedText = "ch ie pr"

给你编码后的字符串 encodedText 和矩阵的行数 rows ,返回源字符串 originalText

注意:originalText 不 含任何尾随空格 ' ' 。生成的测试用例满足 仅存在一个 可能的 originalText 。

示例 1:

代码语言:javascript
复制
输入:encodedText = "ch   ie   pr", rows = 3
输出:"cipher"
解释:此示例与问题描述中的例子相同。

示例 2:

代码语言:javascript
复制
输入:encodedText = "iveo    eed   l te   olc", rows = 4
输出:"i love leetcode"
解释:上图标识用于编码 originalText 的矩阵。 
蓝色箭头展示如何从 encodedText 找到 originalText 。

示例 3:

代码语言:javascript
复制
输入:encodedText = "coding", rows = 1
输出:"coding"
解释:由于只有 1 行,所以 originalText 和 encodedText 是相同的。

示例 4:

代码语言:javascript
复制
输入:encodedText = " b  ac", rows = 2
输出:" abc"
解释:originalText 不能含尾随空格,但它可能会有一个或者多个前置空格。
 
提示:
0 <= encodedText.length <= 10^6
encodedText 仅由小写英文字母和 ' ' 组成
encodedText 是对某个 不含 尾随空格的 originalText 的一个有效编码
1 <= rows <= 1000
生成的测试用例满足 仅存在一个 可能的 originalText

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/decode-the-slanted-ciphertext 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 按题意模拟即可
代码语言:javascript
复制
class Solution {
public:
    string decodeCiphertext(string encodedText, int rows) {
        int n = encodedText.size(), cols = n/rows;
        vector<vector<char>> mat(rows, vector<char>(cols));
        for(int i = 0; i < n; ++i)
            mat[i/cols][i%cols] = encodedText[i];
        string ans;
        for(int j = 0; j < cols; ++j)
        {
            int r = 0, c = j;
            while(r<rows && c<cols)
                ans += mat[r++][c++];//45度向下遍历
        }
        while(ans.size() && ans.back()==' ')
            ans.pop_back();//删除尾随空格
        return ans;
    }
};

112 ms 45 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档