当前位置: 首页 > news >正文

【Z字形变换】

在这里插入图片描述

代码思路分析:Z 字形变换

1. 边界情况处理
if (r == 1 || r >= n) return s;
  • r == 1:只有一行,直接返回原字符串(无需变换)。
  • r >= n:行数大于等于字符串长度,每行只有一个字符,直接返回原字符串。

2. 计算周期和列数
int t = r * 2 - 2;          // 每个Z字形周期的字符数
int c = (n + t - 1) / t * (r - 1); // 总列数
  • 周期 t
    • 一个完整的 Z 字形周期包括:向下走 r 行(占 r-1 列) + 向右上走 r-2 行(占 r-1 列)。
    • 公式:t = r + (r - 2) = 2r - 2
  • 总列数 c
    • 周期数 = ceil(n / t),用整数运算表示为 (n + t - 1) / t
    • 每周期占 r-1 列,因此总列数 c = 周期数 × (r - 1)

3. 初始化二维矩阵
vector<string> nums(r, string(c, 0)); // r行c列的矩阵,初始值为0
  • 创建一个 rc 列的矩阵,用 0 初始化(后续用 char 填充时,0 表示空字符)。

4. 填充矩阵(Z 字形遍历)
for (int i = 0, x = 0, y = 0; i < n; i++) {nums[x][y] = s[i];      // 填充当前字符if (i % t < r - 1) {    // 向下移动阶段x++;} else {                // 向右上移动阶段x--;y++;}
}
  • 坐标 (x, y)
    • x 表示当前行,y 表示当前列。
  • 移动逻辑
    • 向下移动:当 i % t < r - 1 时,x++(行增加)。
    • 向右上移动:否则,x--(行减少),y++(列增加)。

5. 按行拼接结果
string ans;
for (auto &row : nums) {     // 遍历每一行for (char ch : row) {    // 遍历行内字符if (ch) ans += ch;   // 跳过空字符(初始化的0)}
}
return ans;
  • 按行优先顺序遍历矩阵,跳过空字符(0),拼接非空字符。
class Solution {
public:string convert(string s, int numRows) {int n=s.size(),r=numRows;if(r==1||r>=n)return s;int t=r*2-2;int c=(n+t-1)/t*(r-1);vector<string> nums(r,string(c,0));for(int i=0,x=0,y=0;i<n;i++){nums[x][y]=s[i];if(i%t<r-1){x++;}else{x--;y++;}}string ans;for(auto x:nums){for(char ch:x){if(ch){ans+=ch;}}}return ans;}
};
http://www.dtcms.com/a/315296.html

相关文章:

  • 离线Docker项目移植全攻略
  • 明远智睿T113-i核心板:工业设备制造领域成本控制的破局者
  • NX982NX984美光固态闪存NX992NY102
  • UVa1480/LA5034 Jewel
  • webm 读取解析
  • Linux 系统重置用户密码指南
  • go安装gin
  • JMeter 性能测试工具使用教程
  • 【网络运维】Linux:逻辑卷管理
  • Spring @Component注解全解析
  • 计算机网络:子网掩码在路由转发中的关键作用
  • css的选择器
  • 虚拟机中查看和修改文件权限
  • MoonBit Pearls Vol.04:用MoonBit 探索协同式编程
  • Spring Security 认证与授权实现机制
  • 随机森林知识点整理:从原理到实战
  • 课题学习4——将原系统的BERT换为SBERT
  • 【网络运维】Linux:RAID存储技术
  • 单类别目标检测中的 Varifocal Loss 与 mAP 评估:从原理到实践(特别前景和背景类区分)
  • Transformer核心机制:QKV全面解析
  • 图片处理工具类:基于 Thumbnailator 的便捷解决方案
  • Unsloth 大语言模型微调工具介绍
  • 数据结构:反转链表(reverse the linked list)
  • 机器视觉的产品包装帖纸模切应用
  • 深度学习-卷积神经网络CNN-卷积层
  • JMeter的基本使用教程
  • 嵌入式学习之51单片机——串口(UART)
  • STM32F103C8-定时器入门(9)
  • slwl2.0
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 5 部分