6. Z 字形变换

【leetcode】第6题 Z字形变换,详细题解, C++实现,#6. ZigZag Conversion 这几天因为状态不太好,在这题上花了比较多的时间,记录一下。 因为题目很老了,Leetcode上关于此题的题解很多,然而很多题解解释得都不是很清楚,包括leetcode官方题解,题解中符号所表示的意思都不写明,无力吐槽,还是自己写一个当笔记吧。 题目详情 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,... 阅读详情
/**
 * 6. Z 字形变换
 * @author wsq
 * @date 2020/09/24
	将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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
	
	链接:https://leetcode-cn.com/problems/zigzag-conversion
 */
package notsubmit;

import java.util.ArrayList;
import java.util.List;

public class ZigzagTransformation {
	/**
	 *	通过寻找每一行元素之间的位置规律实现按行访问。
	 *	官方给的解法一,看完之后觉得自己很菜了,这里将解法一也写在下面
	 * @param s
	 * @param numRows
	 * @return
	 */
	public String convert(String s, int numRows) {
		if(s.length() < numRows) {
			return s;
		}
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < numRows; i++) {
			int pos = i;
			while(pos < s.length()) {
				sb.append(s.charAt(pos));
				pos += 2 * numRows - 2;
				if((i != 0 && i != numRows - 1) && (pos - 2 * i) < s.length()) {
					sb.append(s.charAt(pos - 2 * i));
				}
			}
		}
		return sb.toString();
	}
	/**
	 *	官方的解法一,想法很独特,唯一不足就是空间的消耗
	 *	用四个列表存储对应排序后的元素
	 * @param s
	 * @param numRows
	 * @return
	 */
	public String convert2(String s, int numRows) {
		if(numRows == 1) {
			return s;
		}
		List<StringBuilder> rows = new ArrayList();
		for(int i = 0; i < Math.min(s.length(), numRows); i++) {
			rows.add(new StringBuilder());
		}
		
		boolean goDown = false;
		int curRow = 0;
		for(char c: s.toCharArray()) {
			rows.get(curRow).append(c);
			if(curRow == 0 || curRow == numRows - 1) {
				goDown = !goDown;
			}
			curRow += goDown ? 1 : -1;
		}
		StringBuilder ans = new StringBuilder();
		for(StringBuilder sb: rows) {
			ans.append(sb);
		}
		return ans.toString();
	}
	
	
	public static void main(String[] args) {
		String s = "LEETCODEISHIRING";
		int numRows = 3;
		ZigzagTransformation zt = new ZigzagTransformation();
		String ans = zt.convert2(s, numRows);
		System.out.println(ans);
	}
}

LeetCode 第6题:Z字形变换 通过这些例子,我们可以看到Z字形变换的过程其实就像是我们在操控一条蛇,让它在指定的行数之间上下游走。这个算法的时间复杂度是O(n),因为我们只需要遍历一次字符串,空间复杂度也是O(n),因为我们用了额外的行数组来存储结果。希望通过这些例子的讲解,大家能更好地理解这个有趣的题目。 阅读详情

相关推荐

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

Z字形变换

一 问题描述 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下: P A H N A P L S I I G Y I R 二 算法简析 1.变换规则是Z字形变换,是由下至上,然后右下至上,一下一上为一个周期,循环迭代,如下所示: 2.设计二维表std::vector<std::vector<char> >z_array存储变换后的字符串,z_...

wangzhicheng2013的专栏 889

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

Z字形变换 详解

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

be_gin_ner的博客 4115

python 常见算法(1-50题)

常见的算法题

weixin_58470558的博客 1759

vcs覆盖率相关

选择要查看的覆盖率点,右键选择 show xxx tests;

qq_40571921的博客 2397

【LeetCode】6. Z 字形变换

【LeetCode】6. Z 字形变换

人类所有真实的快乐,一定是恒久的努力 858

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!

最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。

weixin_48747334的博客 1921

Z 字形变换

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

Wenweno0o的博客 519

基于STM32设计的水下水质检测装置(微信小程序)(205)

本项目设计了一款基于STM32微控制器为核心的水下水质检测设备,该设备具有高度集成化、智能化的特点,能够实时监测水深、温度、浊度及溶解性总固体(TDS)等关键水质参数,并通过4G网络将数据上传至腾讯云IOT物联网平台,实现远程监控和数据分析。同时,为了便于操作和移动观测,还配套开发了微信小程序,用户可通过微信小程序实时查看并控制设备的各项功能,如调整下潜深度等。

1253

matlab 计算点云粗糙度

A Correspondence Framework for ALS Strip Adjustments based on Variants of the ICP Algorithm

点云侠的博客 1830

LeetCode-6 Z字形变换

题目:6. Z字形变换 难度:中等 分类:字符串 解决方案:字符串遍历 今天我们学习第6题Z字形变换,这是一个字符串的中等题,像这样字符串的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。 题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为"LEETCODEISHIRING"行数为3时,...

jacob2359的博客 277

华为OD机试真题2025双机位B卷 Java&Go 实现【朋友圈个数】

给定一组朋友关系,统计一下该朋友关系网中的朋友圈个数。 朋友圈的定义:一个朋友圈至少由3个朋友组成,且要求同一个朋友圈中的任意两个人都具有直接的朋友关系。 输入描述 输入一个朋友关系列表,如 Fiends =A.B],[A.C],IB,DI,其中的每一个元素 Friendsi表示 Friends[i][0)和 Friends [i][1] 是朋友关系 先输入一个数字 N 代表关系的总数,后面每条关系一行,两个成员以逗号分隔

MISAYAONE的博客 520

leetcode 6 Z 字形变换 c++

6最长回文子串 补一个题目位置。https://leetcode-cn.com/problems/zigzag-conversion/ 这题是输出控制,实现了就行。 我的想法:这些字母的排列是按2∗(numRows−1)2*(numRows-1)2∗(numRows−1)的方式呈周期性的,所以对2∗(numRows−1)2*(numRows-1)2∗(numRows−1)取余就可以了。要注意num...

qq_38992914的博客 277

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【LeetCode #6 题解】 Z 字形变换

@toc 一、题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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

|~~~热爱生活、努力学习的小伙汁~~~| 624

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Leetcode 6. Z 字形变换

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。输入:s = “PAYPALISHIRING”, numRows = 3。输入:s = “PAYPALISHIRING”, numRows = 4。输入:s = “A”, numRows = 1。输出:“PAHNAPLSIIGYIR”输出:“PINALSIGYAHRPI”,想法差不多但是比我的这个简洁。

li_yizhixiaowukong的博客 985

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣第6题:Z 字形变换

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

elinice 828

Leetcode 6 Z字形变换

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

qq_30163473的博客 162

【力扣-6】Z字形变换 python解题思路

【力扣-6】Z字形变换 python解题思路。

ccd9287的博客 546

LeetCode 6 Z 字形变换

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

Ailecccc的博客 143

LeetCode6_Z字形变换

重在思路

Haolin_Liu的博客 322

LeetCode6 Z字形变换 ZigZag Conversion

LeetCode6 Z字形变换 ZigZag Conversion 题目描述 题目地址:https://leetcode-cn.com/problems/zigzag-conversion/ 题目难度:中等 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串 示例 示例1: 输入: s = "LEETCODEISHI...

沙码龙 245

6. Z字形变换

• 对于 numRows 行的Z字形排列,第一行和最后一行的字符间隔是 2 * (numRows - 1),而中间行的字符间隔是有两个不同的值交替出现,分别是 2 * (numRows - 当前行号) 和 2 * 当前行号。• 对于字符串中的第 i 个字符,它在Z字形排列中的行号 row 和列号 col 是有规律的,可以通过数学公式计算出来,然后根据行号和列号计算出它在最终结果字符串中的位置。• 通过观察Z字形排列的规律,我们可以发现每个字符所在的行是有规律的。需要遍历字符串 s 一次来构建结果字符串。

qq_40844444的博客 118
上一篇: 17. 电话号码的字母组合
下一篇: 106. 从中序与后序遍历序列构造二叉树(递归版)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值