第六题:Z字形变换(Zigzag Conversion)

2024-08-26 18:36

本文主要是介绍第六题:Z字形变换(Zigzag Conversion),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

将给定的字符串 s 以指定的行数 numRows 进行“Z字形”排列,然后按行读出字符串并返回。

示例:

  1. 输入:s = "PAYPALISHIRING", numRows = 3
    输出:"PAHNAPLSIIGYIR"

  2. 输入:s = "PAYPALISHIRING", numRows = 4
    输出:"PINALSIGYAHRPI"

要求: 你需要将字符串 s 按照 numRows 行的Z字形排列,并返回按行读取的结果。

解题思路

方法1:模拟
  1. 特殊情况处理

    • 当 numRows 为 1 时,直接返回字符串,因为没有Z字形效果。
  2. 创建一个数组

    • 创建一个二维数组 rows,用于存放每行的字符。
  3. 模拟遍历

    • 使用一个变量 currentRow 来记录当前行,另一个变量 goingDown 来指示是否需要向下移动行数。
    • 遍历字符串中的每个字符,根据 goingDown 的状态决定是向下还是向上移动。
  4. 构建结果

    • 遍历二维数组,将每行的字符拼接成结果字符串。

C 语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* convert(char* s, int numRows) {int len = strlen(s);if (numRows == 1 || numRows >= len) return s;char** rows = (char**)malloc(numRows * sizeof(char*));for (int i = 0; i < numRows; i++) {rows[i] = (char*)malloc((len + 1) * sizeof(char));rows[i][0] = '\0';}int currentRow = 0;int goingDown = 0;for (int i = 0; i < len; i++) {strcat(rows[currentRow], (char[]){s[i], '\0'});if (currentRow == 0 || currentRow == numRows - 1) goingDown = !goingDown;currentRow += goingDown ? 1 : -1;}char* result = (char*)malloc((len + 1) * sizeof(char));result[0] = '\0';for (int i = 0; i < numRows; i++) {strcat(result, rows[i]);free(rows[i]);}free(rows);return result;
}

Java 实现

public class Solution {public String convert(String s, int numRows) {if (numRows == 1 || numRows >= s.length()) return s;StringBuilder[] rows = new StringBuilder[numRows];for (int i = 0; i < numRows; i++) {rows[i] = new StringBuilder();}int currentRow = 0;boolean goingDown = false;for (char c : s.toCharArray()) {rows[currentRow].append(c);if (currentRow == 0 || currentRow == numRows - 1) {goingDown = !goingDown;}currentRow += goingDown ? 1 : -1;}StringBuilder result = new StringBuilder();for (StringBuilder row : rows) {result.append(row);}return result.toString();}
}

Python 实现

def convert(s: str, numRows: int) -> str:if numRows == 1 or numRows >= len(s):return srows = [''] * numRowscurrentRow = 0goingDown = Falsefor char in s:rows[currentRow] += charif currentRow == 0 or currentRow == numRows - 1:goingDown = not goingDowncurrentRow += 1 if goingDown else -1return ''.join(rows)

时间复杂度

时间复杂度: 所有这些实现方法的时间复杂度为 (O(n)),其中 (n) 是字符串 s 的长度。由于每个字符都被访问一次,时间复杂度是线性的。

空间复杂度: 空间复杂度为 (O(n)) 来存储最终的结果和各行的字符。对于每个字符,我们都需要一个地方来存储,所以总体空间复杂度是线性的。

这篇关于第六题:Z字形变换(Zigzag Conversion)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109351

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相似对角化5.2 已知两个矩阵相似,求某个矩阵中的未知参数5.3 相似时,求可逆矩阵P,使

【数字信号处理】一文讲清FFT(快速傅里叶变换)

目录 快速傅里叶变换(Fast Fourier Transform,FFT)FFT的背景快速傅里叶变换(Fast Fourier Transform,FFT)DFT的数学表达实际计算重要性和应用频谱泄露、频谱混叠奈奎斯特采样定理参考链接 快速傅里叶变换(Fast Fourier Transform,FFT) FFT的背景 1、为什么要时域→频域频率?50Hz+频率120Hz

傅里叶变换家族

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

齐次变换矩阵的原理与应用

齐次变换矩阵的原理与应用 通过齐次变换矩阵,可以描述机械臂末端执行器(法兰)在三维空间中的平移和旋转操作。该矩阵结合了旋转和平移信息,用于坐标变换。 1. 齐次变换矩阵的基本形式 一个齐次变换矩阵 T是一个 4x4 矩阵,表示刚体的旋转和平移: T = [ R t 0 1 ] = [ r 11 r 12 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0

【微处理器系统原理和应用设计第六讲】片上微处理器系统系统架构

一、概念辨析 首先来厘清以下概念:微处理器,微控制器,单片机,片上微处理器系统 (1)微处理器:即MPU(Microprocessor Unit),微处理器是一种计算机的中央处理单元 (CPU),通常集成在一个或多个集成电路 (IC) 中。微处理器执行指令,并处理计算机中的数据。微处理器一般不包含存储器、I/O接口等外围组件,通常需要搭配外部芯片(如RAM、ROM、I/O接口等)来构成完整的计

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

PyTorch Demo-4 : 数据变换Transforms

Transforms的函数有很多,每次都是直接copy已有的代码,但是不知道具体是什么样子,在这里记录一下 Transforms常用方法的具体说明参考链接1,链接2,或者官方文档。 原始图像采用图像处理经典的Lena: Python代码 from PIL import Imagefrom torchvision import transforms as tfimport ma

【Get深一度】小波变换通俗解释 -算法与数学之美

链接:http://www.zhihu.com/question/22864189/answer/40772083 文章推荐人:杨晓东 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。     下面就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东