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”形转换)相关推荐

  1. LeetCode-6:ZigZag Conversion(Z字形变换)

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  2. 【LeetCode】6. ZigZag Conversion Z 字形变换

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:字形变换,ZigZag,题解,Leetcode, 力扣,P ...

  3. [LeetCode]ZigZag Conversion

    题目:ZigZag Conversion 一串字符按照Z字形的数组给了我们,要求转成原本的顺序. 思路: 统计"|/"的个数: 竖着的和斜着的下标有对应关系: 竖着的:k = j* ...

  4. 6——ZigZag Conversion

    六.ZigZag Conversion 锯齿变换 题目大意:输入一个字符串和int型(锯齿层数) 将字符串以锯齿变化重新排序 例: "HAIZEIKEJILAOCHUANZHANG" ...

  5. [LeetCode题解] ZigZag Conversion

    原文在这,可以来我blog翻翻哦. 第二天.今天AC掉了一道之前没AC掉的题目... 今天的题目是6. ZigZag Conversion 题目描述: The string "PAYPALI ...

  6. ZigZag Conversion

    ZigZag Conversion 1. Question 给定行数,将某字符串转换为zigzag形式,然后按行输出.zigzag形式如: The string "PAYPALISHIRIN ...

  7. 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 ...

  8. [勇者闯LeetCode] 6. ZigZag Conversion

    [勇者闯LeetCode] 6. ZigZag Conversion Description The string "PAYPALISHIRING" is written in a ...

  9. DCG dual conversion gain双转换增益(参考Aptina---DR-Pix_WhitePaper)

    Dynamic Response Pixel Technology---动态响应像素处理技术 这种方法被Aptina称为动态响应像素技术,或AptinaTM DR-PixTM技术,需要控制打开和关闭连 ...

最新文章

  1. Pytorch中的序列化容器-度消失和梯度爆炸-nn.Sequential-nn.BatchNorm1d-nn.Dropout
  2. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
  3. NLP-基础知识-002 (语言模型)
  4. 分布式架构--基本思想汇总
  5. 阿里技术专家告诉你,如何画出优秀的架构图?
  6. c语言手机教程,【图片】【教程】手机c语言入门与手机c编程【mrp吧】_百度贴吧...
  7. 提前浏览win11浏览器什么样
  8. java如何实现成绩排序_java 成绩排序
  9. LintCode 842: Origami
  10. Javascript使用模板字符串,find,findIndex,some,every查找数据以及map,filter过滤数据,reduce求和或平均值
  11. Houdini图文笔记:Houdini Indie正版声明
  12. 企业网络项目投标范文
  13. 很哇塞的网页特效之字符串切换
  14. 【编码实现】结合encoder和projector对w进行优化(projector_encoder.py)
  15. Java基础——对象和类1(面向对象基本概念)
  16. 《区块链革命》读书笔记1可信的协议 引导未来:区块链经济七大设计原则
  17. C++ 读取txt文件中数据并存入数组中
  18. web前端html5+css3学习笔记(3)——标签
  19. 使用Vuforia创建神奇宝贝GO风格增强现实游戏
  20. 改进YOLOv7系列:首发结合最新Transformer视觉模型MOAT结构:交替移动卷积和注意力带来强大的Transformer视觉模型,超强的提升

热门文章

  1. JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?
  2. 多种多样的Photoshop 的撤消命令
  3. 论宏观和微观角度理解二极管和三极管的工作原理
  4. 安卓 每日一题 2020年5-6月问题及答案
  5. 时间序列分析的基本思路与步骤(入门级,新手必看!!!)
  6. SAP 常用BAPI
  7. 【AI公司酷05期】美宅科技:独创人工智能室内设计引擎,帮你3秒搞定装修方案,要用AI赋能家居新零售
  8. 好用的第三方网站ios
  9. 如何使用FFmpeg的解码器
  10. NTP网络时钟同步协议对计算机网络数据的重要性