Z字型变换(Go,LeetCode)

LeetCode刷题(Go语言实现-持续更新) 最近开始学习Go语言,所以尝试使用Go语言刷题来更好的属性这门语言。打算按顺序刷LeetCode,因此会长期更新,欢迎大神一同来交流。 1.两数之和 (1)暴力解法:采用暴力方法直接使用二重循环尝试用两树拼凑taget,代码如下: func twoSum(nums []int, target int) []int { result := make([]int, 0) for ... 阅读详情

目录

题目描述

解决方案

代码

代码走读

传送门


题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z字形排列。比如输入字符串为 LEETCODEISHIRING ,行数为3时,排列如下:

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

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

解决方案

使用模拟法解决形象生动。

假设行数为n,我们生成一个二元切片,长度为n,表示成n行,定义一个指针变量模拟Z字形走向:从第1行依次往下,到达最后一行后在往上走,重复该循环,直到所有元素都被遍历完。指针变量每走到一个元素,就将该元素插入到对应行数的切片中。最终将每一行字符连接输出,得到想要的结果。

复杂度分析:因为只需要遍历一遍字符串,因此时间复杂度为 O(n)。只需要定义常数个变量,因此空间复杂度为 O(1) 。

代码

package main

import (
	"fmt"
	"strings"
)

func convert(s string, numRows int) string {
	if numRows == 1 {
		return s
	}

	pool := make([][]string, 0)
	for i := 0; i < numRows; i++ {
		pool = append(pool, make([]string, 0))
	}
	down := false
	currentLine := 0

	for _, c := range s {
		if currentLine == 0 || currentLine == numRows-1 {
			down = !down
		}

		pool[currentLine] = append(pool[currentLine], string(c))
		if down {
			currentLine++
		} else {
			currentLine--
		}
	}

	result := ""
	for i := range pool {
		line := strings.Join(pool[i], "")
		result += line
	}
	return result
}

代码走读

package main

import (
   "fmt"
   "strings"
)

func convert(s string, numRows int) string {
   // 如果给定的行数只有一行,那么只需要将原字符串返回
   if numRows == 1 {
      return s
   }

   // 初始化存储每一行字符的二维切片
   pool := make([][]string, 0)
   for i := 0; i < numRows; i++ {
      pool = append(pool, make([]string, 0))
   }

   // down变量用来模拟Z字型游标的走向(flase向上,true向下)
   down := false

   // 游标指针变量,表示当前行数
   currentLine := 0

   for _, c := range s {
      // 如果游标抵达边界,需要改变方向
      if currentLine == 0 || currentLine == numRows-1 {
         down = !down
      }

      // 对应行添加字符
      pool[currentLine] = append(pool[currentLine], string(c))
      if down {
         currentLine++
      } else {
         currentLine--
      }
   }

   // 按照每一行字符依次拼接的方式输出结果
   result := ""
   for i := range pool {
      line := strings.Join(pool[i], "")
      result += line
   }
   return result
}

// 自测用例
func main() {
   fmt.Println(convert("LEETCODEISHIRING", 3))
}

传送门

LeetCode试题链接

DDR5内存命令真值表详解:如何正确解析JESD79-5标准中的关键指令 本文深度解析JESD79-5标准中的DDR5内存命令真值表,将其视为动态通信协议进行拆解。详细阐述了1-Cycle与2-Cycle命令的区别、Bank Group寻址机制以及模式寄存器(MR)操作流程,为硬件与固件工程师提供了从信号解析到系统调试的完整实战指南,是理解和优化高性能计算平台内存子系统的核心。 阅读详情

相关推荐

Ubuntu 20.04 系统备份和还原

最近大家Ubuntu开发环境,经常出现搭着搭着系统就挂了,于是开始琢磨了Ubuntu系统的备份和还原,以备不时之需,Linux环境搭建实在是有点太细,好多情况下,就算曾经搭建过一遍,再次搭建有些包还是忘了安装,做好备份是十分必要的。 经过了一番研究,Ubuntu备份有很多方式:根目录tar、dd、Systemback(1.0版本已经不维护了,2.0版本收费)等等,最终决定使用 —— Timesift, 因为方便一些。 文章参考:小马虎的救星——Timeshift Timeshift Timeshift,是L

Z_Paper的博客 2万+

go语言刷题:6. Z 字形变换

申明:本文只用做自己学习记录 题目 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。 示例 1: 输入:s = “PAYPALISHIRING”, numRows = 3 输出:“PAHNAPLSIIGYIR” 示例 2

lanseali的博客 330

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

http请求地址上一篇百炼平台配置的应用地址。

hefaji的博客 1916

leetcode 6 Z字形变换O(n) ---python

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

瑶子的博客 690

XGBoost特征重要性为0的问题:深度解析与应对策略

在机器学习领域,XGBoost(Extreme Gradient Boosting)作为一款高效且强大的集成学习算法,已经被广泛应用于各类预测任务中。然而,在实际应用过程中,许多数据科学家和工程师们遇到了一个令人困惑的现象——某些特征的重要性值为0。这不仅影响了模型的解释性,还可能导致特征选择过程中的误判。本文将深入探讨这一问题,分析其背后的原因,并提供相应的解决方案。在深入探讨特征重要性为0的问题之前,我们首先需要了解XGBoost是如何计算特征重要性的。XGBoost提供了三种常见的特征重要性计算方法:

cda2024的博客 1705

AOA(Angle of Arrival,到达角)定位算法及其误差分析的原理和MATLAB仿真_aoa定位算法

如图所示,有基站 S 1 ( x 1 , y 1 , z 1 ) , S 2 ( x 2 , y 2 , z 2 ) S_1(x_1,y_1,z_1),S_2(x_2,y_2,z_2) S1​(x1​,y1​,z1​),S2​(x2​,y2​,z2​),目标 T ( x , y , z ) T(x,y,z) T(x,y,z)。2+(z_1-z_2)^2} step1:两基站间的距离L=(x1−x2)2+(y1​−y2​)2+(z1​−z2​)2。

2401_87555613的博客 1483

6. Z 字形变换

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

qq_27336027的博客 245

AXI VIP配置全指南:从报错到成功仿真的完整流程(Vivado 2023版)

本文详细解析了在Vivado 2023环境中配置AXI Verification IP(VIP)进行协议仿真的完整流程。针对常见的include和import报错问题,提供了具体的解决方案和代码示例,指导用户从IP核创建、参数化配置,到构建可工作的仿真测试平台,最终实现成功仿真。

gpt4scribbler的博客 233

Z 字形变换

题目描述: 解题思路: 思路一: 使用一个二维数组,然后按照题目要求计算每一个字符的位置放到二维数组中,然后按照要求按行遍历二维数组,输出对应的字符串即可 思路二: 通过观察上面给出的两个例子,可以进行行数的扩展,对行数为2,5,6,7进行计算以后,总结以后的规律如下: 对于任意整数i,有: 1)对于Z字形的二维数组的第一行,对应的字符在 s 中的下标是 i * (2 * k - 2) 2) 对于Z字形的二维数组的最后一行,对应的字符在s中的下标是 i * (2 * k - 2)+ k - 1 3) 对于

weixin_38853761的博客 580

【WRF理论】配置诊断变量 &diags

【WRF理论】配置诊断变量 &diags

WW、forever的博客 137

SAP项目中 Waterfall vs Agile 的深度对比分析背景:方法论的演进SAP项目实施方法论经历了显著的代际更替。早期以 ASAP(Accelerated SAP) 为代表,采用经典瀑

本文对比分析了SAP项目实施中瀑布模型(ASAP)与敏捷方法(SAP Activate)的核心差异。瀑布模型采用线性流程,需求固定但变更成本高;敏捷方法则通过迭代开发实现动态调整,强调最佳实践和用户持续参与。文章指出,SAP系统的复杂性使纯粹敏捷难以实施,需在标准化与定制化间取得平衡。最终建议根据项目特性选择方法论:稳定需求适用瀑布模型,变化频繁则推荐敏捷,而SAP Activate本质上是两者的结构化融合,代表未来趋势。关键在于匹配项目实际需求,而非盲目追随方法论潮流。

金牌架构师 345

【力扣6-Z字形变换零钱兑换】多种解法,模拟Z索引+模拟行索引(golang)

目录题目描述思路题解方法1:模拟Z索引方法2:模拟行索引 题目描述 https://leetcode-cn.com/problems/zigzag-conversion 思路题解 方法1:模拟Z索引 自己敲得,速度比较慢,思路就是建立一个数组,模拟整个过程:按Z字形(其实是N字形)插入-按行遍历数组-拼凑并返回结果 func convert(s string, numRows int) string { //0.特殊情况处理 if numRows==1{ return s } //1.开辟矩阵

戴某某 189

新能源汽车电机交流电流测量系统精度全链路分析

通过全链路误差建模与瓶颈分析,结合硬件选型优化与软件算法补偿,可将系统精度从4.2%提升至≤1% FS。本文所述方法论已应用于某800V电驱平台开发,实测电流控制精度达±0.8%,为高性能电机控制奠定基础。为例,深入剖析从互感器采集到CAN报文解析的全链路信号处理流程,揭示各环节误差来源及对最终精度的影响,为研发测试提供理论支撑。:±0.1%(电阻温漂与运放开环增益限制):运放增益带宽积(GBW)不足导致高频衰减。:±0.02%/℃(铁氧体材料温敏特性):±0.5%读数(磁芯饱和效应)

优快云-新能源汽车研发测试专业博主 1493

Golang学习之路 - LeetCode-Go-Learning 第六题. Z 字形变换

Golang基础[6. ZigZag Conversion](https://leetcode.com/problems/zigzag-conversion/)题目解题思路解题代码解决方案 1 按上述规律编程解决方案 2测试代码 6. ZigZag Conversion 题目 The string “PAYPALISHIRING” is written in a zigzag pattern on...

莫寒技术人生 283

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode 6. Z 字形变换 - Go 实现

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:

王小明的专栏 524

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Z字形转化

LEECODE Algorithm 6. ZigZag Conversion 题目 代码块 想法 Description The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a

qq_34689452的博客 629

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode刷题笔记——模拟(6. Z 字形变换)-Go语言

LeetCode刷题笔记——模拟(6. Z 字形变换)-Go语言 6. Z 字形变换 中等 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。 请你实现这个将字符串进

qq_22328011的博客 389

leetcode算法题—golang—Z 字形变换(题6)

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

墨怀旧 719

leetcode Zigzag

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

Tony_an的博客 423

C语言z形变换算法,6. Z字形变换

难度:中等将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:P A H NA P L S I I GY I R之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"Java实现:public class topic6 {public static void main(String[] args) {String s = "PAYPALI...

weixin_39798031的博客 344

Go strings.Split函数

Go strings.Split函数 介绍、使用方法和注意事项。

TCatTime的博客 7万+

Go string函数与strconv.Itoa函数的区别

Go string函数与strconv.Itoa函数的区别。

TCatTime的博客 2万+

Go strings.HasPrefix函数

Go strings.HasPrefix函数 介绍、使用方法和注意事项。

TCatTime的博客 1万+

Go context.WithTimeout函数:超时控制

Go实现超时控制:context.WithTimeout函数介绍、使用示例。

TCatTime的博客 1万+

Go delete函数:从map中删除键值对

Go delete函数(从map中删除键值对)介绍、使用示例和注意事项。

TCatTime的博客 7677

Go errors.New函数:创建错误对象

Go errors.New函数介绍、使用示例和注意事项。

TCatTime的博客 7494
上一篇: Z字形变换(Python,LeetCode)
下一篇: 不依赖标准库将十进制整数转换为字符串(Go)
TCatTime
博客等级 码龄9年 400粉丝 256原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值