ZigZag Conversion(“Z”形转换)
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this:
(字符串”PAYPALISHIRING”以给定的行数写成如下Z形模式)
(you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:
(编程实现将字符串以给定行数进行该转换)
string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.
1.个人分析
题意是将给定的字符串根据行数先转换为示例所展示的Z形结构,最后将其逐行读取读取构成新的字符串并返回。这里主要就是解决如何将字符串正确的转换,可以使用一个字符串数组来保存转换的结果,将字符串逐列保存到数组中。
2.个人解法
string convert(string s, int numRows)
{vector<string> strVec(numRows);int n = s.length(), i = 0;while (i < n) {for (int j = 0; j < numRows && i < n; ++j)strVec[j].push_back(s[i++]);for (int j = numRows - 2; j >= 1 && i < n; --j)strVec[j].push_back(s[i++]);}string res;vector<string>::iterator it;for (it=strVec.begin(); it != strVec.end(); ++it) res += *it;return res;
}
该解法的时间复杂度为O(n),空间复杂度为O(n)。
3.参考解法
string convert(string s, int numRows)
{if(numRows <= 1) return s;string result = "";int cycle = 2 * numRows - 2;for(int i = 0; i < numRows; ++i){for(int j = i; j < s.length(); j = j + cycle){result = result + s[j];int secondJ = (j - i) + cycle - i;if(i != 0 && i != numRows-1 && secondJ < s.length())result = result + s[secondJ];}}
return result;
}
该解法的时间复杂度为O(n),空间复杂度为O(1)。
4.总结
起初对Z形字符串的定义还不是很理解,也就看不出这种字符串的排列规律。这里可以从两方面去看排列规律,未完全填满的中间列(可以理解为斜对角)所包含元素的个数为numRows-2;另外也可以将每一列和斜对角的元素作为一个周期,除了第一行和最后一行,每个周期的每行都含有两个元素。
n=numRows
Δ=2n-2 1 2n-1 4n-3
Δ= 2 2n-2 2n 4n-4 4n-2
Δ= 3 2n-3 2n+1 4n-5 .
Δ= . . . . .
Δ= . n+2 . 3n .
Δ= n-1 n+1 3n-3 3n-1 5n-5
Δ=2n-2 n 3n-2 5n-4
PS:
- 题目的中文翻译是本人所作,如有偏差敬请指正。
- 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。
ZigZag Conversion(“Z”形转换)相关推荐
- LeetCode-6:ZigZag Conversion(Z字形变换)
题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- 【LeetCode】6. ZigZag Conversion Z 字形变换
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:字形变换,ZigZag,题解,Leetcode, 力扣,P ...
- [LeetCode]ZigZag Conversion
题目:ZigZag Conversion 一串字符按照Z字形的数组给了我们,要求转成原本的顺序. 思路: 统计"|/"的个数: 竖着的和斜着的下标有对应关系: 竖着的:k = j* ...
- 6——ZigZag Conversion
六.ZigZag Conversion 锯齿变换 题目大意:输入一个字符串和int型(锯齿层数) 将字符串以锯齿变化重新排序 例: "HAIZEIKEJILAOCHUANZHANG" ...
- [LeetCode题解] ZigZag Conversion
原文在这,可以来我blog翻翻哦. 第二天.今天AC掉了一道之前没AC掉的题目... 今天的题目是6. ZigZag Conversion 题目描述: The string "PAYPALI ...
- ZigZag Conversion
ZigZag Conversion 1. Question 给定行数,将某字符串转换为zigzag形式,然后按行输出.zigzag形式如: The string "PAYPALISHIRIN ...
- leetCode 6. ZigZag Conversion 字符串 (上传费劲)
6. ZigZag Conversion 题目:https://leetcode.com/problems/zigzag-conversion/ 1 2 3 4 5 6 7 8 9 10 11 12 ...
- [勇者闯LeetCode] 6. ZigZag Conversion
[勇者闯LeetCode] 6. ZigZag Conversion Description The string "PAYPALISHIRING" is written in a ...
- DCG dual conversion gain双转换增益(参考Aptina---DR-Pix_WhitePaper)
Dynamic Response Pixel Technology---动态响应像素处理技术 这种方法被Aptina称为动态响应像素技术,或AptinaTM DR-PixTM技术,需要控制打开和关闭连 ...
最新文章
- Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout
- python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
- NLP-基础知识-002 (语言模型)
- 分布式架构--基本思想汇总
- 阿里技术专家告诉你,如何画出优秀的架构图?
- c语言手机教程,【图片】【教程】手机c语言入门与手机c编程【mrp吧】_百度贴吧...
- 提前浏览win11浏览器什么样
- java如何实现成绩排序_java 成绩排序
- LintCode 842: Origami
- Javascript使用模板字符串,find,findIndex,some,every查找数据以及map,filter过滤数据,reduce求和或平均值
- Houdini图文笔记:Houdini Indie正版声明
- 企业网络项目投标范文
- 很哇塞的网页特效之字符串切换
- 【编码实现】结合encoder和projector对w进行优化(projector_encoder.py)
- Java基础——对象和类1(面向对象基本概念)
- 《区块链革命》读书笔记1可信的协议 引导未来:区块链经济七大设计原则
- C++ 读取txt文件中数据并存入数组中
- web前端html5+css3学习笔记(3)——标签
- 使用Vuforia创建神奇宝贝GO风格增强现实游戏
- 改进YOLOv7系列:首发结合最新Transformer视觉模型MOAT结构:交替移动卷积和注意力带来强大的Transformer视觉模型,超强的提升