Z字形变换 详解

article/2025/9/19 3:59:54

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L   C   I   R
E T O E S I I G
E   D   H   N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);

示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"

示例 2:
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

解题思路:

如图:图中的数字是下标,i为行数,k是每一行第k个元素。

按照4行的情况来算, numRows = 4;

1.第0行的字符位于k(2*numRows-2)的位置。所对应的下标(0 , 6, 12)

2.最后一行(numRows-1)的字符位于k(2*numRows-2)+numRows-1的位置。(3, 9,15)

3.第0行和最后一行之间第i行的字符位于k(2*numRows−2)+i 以及 (k+1)(2*numRows-2)- i处。(1, 5, 7,11, 13)

难点就是要把中间几行的规律搞清楚,就很好处理了。其实自己画一画,就能找出这些规律了。

代码实现:

class Solution {public String convert(String s,int numRows) {if( numRows == 1)return s;int temp = 2*numRows - 2;StringBuilder str = new StringBuilder();for(int i = 0; i < numRows; i++){//第0行if(i == 0){for(int k = 0; k * temp < s.length(); k++){str.append(s.charAt(k*temp));}}//第numRows-1行else if(i == numRows -1){for(int k = 0; k*temp+numRows-1 < s.length();k++){str.append(s.charAt(k*temp+numRows-1));}}//中间行else{for(int k = 0; k*temp+i < s.length(); k++){str.append(s.charAt(k*temp+i));if((k+1)*temp -i < s.length()){str.append(s.charAt((k+1)*temp - i));}}}}return str.toString();}
}

简化之后:看起来更简练。

class Solution {public String convert(String s, int numRows) {if(numRows == 1){return s;}StringBuilder ret = new StringBuilder();int n = s.length();int temp = 2 * numRows - 2;for (int i = 0; i < numRows; i++) {for (int k = 0; k + i < n; k += temp) {ret.append(s.charAt(k + i));if (i != 0 && i != numRows - 1 && k + temp - i < n)ret.append(s.charAt(k + temp - i));}}return ret.toString();}

 


http://chatgpt.dhexx.cn/article/ujhK9l7K.shtml

相关文章

【线性代数】20 基变换,基变换公式,坐标变换公式

前言&#xff1a;基变换在做图像压缩等计算的时候&#xff0c;经常用到。基变换和相似矩阵的定义也有非常密切的联系&#xff1a;基变换的本质就是变换了基向量的一个关联计算&#xff0c;在最小二乘的算法里面&#xff0c;通过选择正确的基可以将计算进行简化。 而正确的的特…

关于《信号与系统》单边z变换位移性质公式的理解

关于b站《信号与线性系统分析 郭宝龙》的视频p155中有弹幕提出单边z变换的平移性质相关疑问&#xff0c;考虑到公式实在难记&#xff0c;这里给出理解记忆方案。

Z变换(2020.10.21)

1.Z变换 1.1 Z变换公式 1.2 matlab函数(ztrans) 1.2.1 Syntax(语法) ztrans(f)ztrans(f,transVar)ztrans(f,var,transVar) 1.2.2 Input Arguments f — Input var — Independent variable transVar — Transformation variable 1.2.3 Description 1. ztrans(f) finds the Z…

Z变换理论梳理

【自控笔记】6.3 Z变换理论 本文框架如下&#xff1a; 一、Z变换定义 Z变换是研究离散系统的数学工具&#xff0c;与拉式变换在连续系统中的地位是一样的。Z变换只对离散信号而言&#xff0c;Z变换对连续信号无意义。它并不是一种新的数学变换&#xff0c;它只是在离散信号拉…

信号与系统公式笔记(9)——Z变换

还是齐开悦博士的视频&#xff0c;不过这次没看完就自己看着书总结了&#xff08;还是觉得看书更加高效率&#xff09;。 重新提一下&#xff0c;一定要把课本的例题过一遍&#xff0c;因为例题有很详细的解析&#xff08;孙国霞的书的话比较少资料&#xff0c;贫僧觉得还是看…

数字信号处理(三)离散时间信号的Z变换

文章目录 什么是Z变换离散时间信号的Z变换的定义Z变换收敛域的特性Z变换的性质和定理常用序列的Z变换及其收敛域逆Z变换差分方程的Z变换解 什么是Z变换 Z变换&#xff08;Z-transformation&#xff09;是对离散序列进行的一种数学变换&#xff0c;常用于求线性时不变差分方程的…

【信号与系统】z变换

z变换 文章目录 z变换基本公式常用公式基本性质其他公式卷积定理与s平面的关系 其他一些说明 基本公式 单 边 z 变 换 &#xff1a; X ( z ) ∑ n 0 ∞ x ( n ) z − n 双 边 z 变 换 &#xff1a; X ( z ) ∑ n − ∞ ∞ x ( n ) z − n X ( z ) 也 叫 x ( n ) 的 生 成 函…

爱奇艺实时数据湖平台建设实践

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 导读 本文将介绍 Iceberg 在爱奇艺的落地与实践 主要内容包括以下几大部分&#xff1a; 爱奇艺 OLAP 简介为什么要数据湖数据湖平台建设性能优化业务落地 1. 爱奇艺 OLAP 简介 首先简单介绍一下爱奇艺 OLAP…

Apache Ranger剖析:Hadoop生态圈的安全管家

前言 2016年&#xff0c;Hadoop迎来了自己十周岁生日。过去的十年&#xff0c;Hadoop雄霸武林盟主之位&#xff0c;号令天下&#xff0c;引领大数据技术生态不断发展壮大&#xff0c;一时间百家争鸣&#xff0c;百花齐放。然而&#xff0c;兄弟多了不好管&#xff0c;为了抢占…

【转载】Apache Ranger剖析:Hadoop生态圈的安全管家

前言 2016年&#xff0c;Hadoop迎来了自己十周岁生日。过去的十年&#xff0c;Hadoop雄霸武林盟主之位&#xff0c;号令天下&#xff0c;引领大数据技术生态不断发展壮大&#xff0c;一时间百家争鸣&#xff0c;百花齐放。然而&#xff0c;兄弟多了不好管&#xff0c;为了抢占…

CheckPoint的一些探寻

由于上项目的模块计算部分依赖于spark&#xff0c;那么在spark的使用上&#xff0c;需要针对不同规模和形式的数据&#xff0c;都要能最大限度的做到数据变换&#xff0c;模型计算等计算的稳定性支持。这也是elemental目前急需优化的瓶颈所在。这里&#xff0c;我们针对下面的场…

Flink学习1-基础概念

Flink学习1-基础概念 Flink系列文章 更多Flink系列文章请点击Flink系列文章 更多大数据文章请点击大数据好文推荐 摘要 本文是作者学习Flink的一些文档整理、记录和心得体会&#xff0c;希望与大家共同学习探讨。 1 Flink简介 1.1 概念 Apache Flink是一个开源的分布式流…

Ranger架构剖析

Ranger介绍 2016年&#xff0c;Hadoop迎来了自己十周岁生日。过去的十年&#xff0c;Hadoop雄霸武林盟主之位&#xff0c;号令天下&#xff0c;引领大数据技术生态不断发展壮大&#xff0c;一时间百家争鸣&#xff0c;百花齐放。然而&#xff0c;兄弟多了不好管&#xff0c;为了…

Ranger架构

一、Ranger介绍 随着大数据技术生态不断发展壮大&#xff0c;为了抢占企业级市场&#xff0c;各厂商都迭代出自己的一套访问控制体系&#xff0c;不管是老牌系统&#xff08;比如HDFS、HBase&#xff09;&#xff0c;还是生态新贵&#xff08;比如Kafka、Alluxio&#xff09;&…

大数据技术栈概貌

一、大数据技术栈概貌 pig&#xff1a;要使用 Apache Pig 分析数据&#xff0c;程序员需要使用Pig Latin语言编写脚本。所有这些脚本都在内部转换为Map和Reduce任务。sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。导入数据&#xff1a;MySQL&…

一节课轻松通关 Spark

大数据跟我学系列文章007-三节课轻松通关 Spark &#xff08;一&#xff09; 文章目录 大数据跟我学系列文章007-三节课轻松通关 Spark &#xff08;一&#xff09;前言第01讲&#xff1a; MapReduce&#xff1a;计算框架和编程模型第02讲&#xff1a;Hadoop&#xff1a;集群的…

基于深度强化学习的连接查询优化

Krishnan, S., et al. (2018). "Learning to optimize join queries with deep reinforcement learning." 如何优化 SQL 连接是数据库社区数十年来一直在研究的一个大问题。伯克利 RiseLab 公布的一项研究表明&#xff0c;深度强化学习可以被成功地应用在优化 SQL 连…

Flink流处理框架总结

Flink流处理框架 第一部分 Flink 概述第 1 节 什么是 Flink第 2 节 Flink 特点第 2 节 Flink 应用场景第 4 节 Flink 核心组成及生态发展第 5 节 Flink 处理模型&#xff1a;流处理与批处理第 6 节 流处理引擎的技术选型 第二部分 Flink快速应用第 1 节 单词统计案例&#xff0…

Presto(Trino)动态过滤与优化器

Presto 系列文章目录- 动态过滤与谓词下推 文章目录 Presto 系列文章目录- 动态过滤与谓词下推trino性能提升新特性Dynamic partition pruning动态分区裁剪设计注意事项执行未来的工作 Hive connector延迟执行动态过滤器 动态过滤分析和确认动态过滤器收集阈值维度表布局局限性…

AI 应用的全流程存储加速方案技术解析和实践分享

AI 应用对存储系统的挑战是全面的&#xff0c;从离应用最近的数据计算如何加速&#xff0c;到离应用最远的数据存储如何管理&#xff0c;到数据存储和数据计算之间如何高效流通&#xff0c;再到不同应用之间的资源调度如何协调 …… 这其中每一个环节的低效&#xff0c;都有可能…