链接


题目地址 https://leetcode.com/problems/zigzag-conversion/

github解题 https://github.com/gatieme/LeetCode/tree/master/006-ZigZagConversion

CSDN题解:http://blog.csdn.net/gatieme/article/details/50889937

题目描述


字符串“PAYPALISHIRING”通过一个给定的行数写成如下这种Z型模式:

P   A   H   N
A P L S I I G
Y   I   R

然后一行一行的读取:“PAHNAPLSIIGYIR”

写代码读入一个字符串并通过给定的行数做这个转换:

string convert(string text, int nRows);

调用convert("PAYPALISHIRING", 3),应该返回"PAHNAPLSIIGYIR"

思路


zigzag的意思是”之”字形,zigzag conversion也就是按"N"字母的样子来重新安排字符串中字符的位置,并合并成一个新的字符串。
nRows则表示“N”的高度,也就是每一竖列有nRows`个字符。

我采用的是一个比较简单的方法,创建nRowsstring,并将老字符串中字符依次写入新string中,写完之后将nRowsstring合并成一个,问题就解决了。算法的复杂度为O(n)
Zigzag:即循环对角线结构(

参考 http://www.cnblogs.com/sanghai/p/3632528.html

题没什么意思,就是纯粹的找规律

发现所有行的重复周期都是 2 * nRows - 2

对于首行和末行之间的行,还会额外重复一次,重复的这一次距离本周期起始字符的距离是 2 * nRows - 2 - 2 * i

#include <iostream>
#include <string>/*
创建nRows个char数组,将s按照0,1,2,...,nRows-2,nRows-1,nRows-2,...,2,1,0的顺序,将s中每个字符装入数组。具体来说,数组下标先递增,直到nRows-1,则反向,直到0,再反向,……直到s字符全部装入各数组再依次输出0~nRows-1个数组。
*/class Solution {
public:std::string convert(std::string s, int nRows){// Start typing your C/C++ solution below// DO NOT write int main() functionstd::string result;if (nRows < 2) return s;for (int i = 0;i < nRows; ++i){for (int j = i; j < s.length(); j += 2 * (nRows - 1)){result.push_back(s[j]);if (i > 0 && i < nRows - 1){if (j + 2 * (nRows - i - 1) < s.length()){result.push_back(s[j + 2 * (nRows - i - 1)]);}}}}return result;}
};int main(void)
{Solution solu;std::cout <<solu.convert("PAYPALISHIRING", 3) <<std::endl;return 0;
}

LeetCode题解-6. ZigZag Conversion相关推荐

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

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

  2. [LeetCode题解] ZigZag Conversion

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

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

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

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

  5. [LeetCode]ZigZag Conversion

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

  6. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有两个节点--左孩 ...

  7. 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!

    转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...

  8. ZigZag Conversion

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

  9. PHP版Leetcode题解开始随缘更新

    2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...

  10. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

最新文章

  1. 定位的准确度与精度指标定义——RMS,CEP,Sigma
  2. 前端学Markdown
  3. 「万字图文」史上最姨母级Java继承详解
  4. 一周学习总结PPT-学会VLOOKUP函数,1分钟搞定数据汇总
  5. Spring aop面向切面编程概述
  6. 在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔
  7. COSCon'18 面向全宇宙招募志愿者啦!
  8. Android之屏幕旋转之后当前activity被finish了依然被拉起来
  9. [html] 说说base标签有什么作用?
  10. php quick,Gitee 极速下载
  11. 直面 Jira,Worktile CTO 为何自信满满?
  12. 如何在MySQL中缩小/清除ibdata1文件
  13. Python NumPy教程
  14. 算法学习之路|程序运行时间
  15. python中func函数_Python 函数(func)学习
  16. keil5工程函数无法跳转到函数定义解决方法
  17. 修改过----AtCoder Beginner Contest 190 D Staircase Sequences(唯一分解求因子数)
  18. 帆软bi 观远bi_与电源bi一起加入
  19. python重新安装ssl_python3安装文件遇到ssl未安装问题
  20. 要只看每日减少的新增数量,别忘了疫情最开始的时候可能也只有几个人患病

热门文章

  1. Data Collection and Storage We noticed that your app requests the user’s consent to access the ....
  2. php 设置针式打印机纸张,针式打印机设置方法 针式打印机打印连续纸设置技巧【图文】...
  3. Foxmail添加163邮箱账号的方法
  4. 概率论的学习和整理10:古典概型 和 二项分布(N重伯努利试验)
  5. 天地图key的申请步骤
  6. 大芒果单机修改服务器名字,大芒果服务器怎么创建GM账号?
  7. Latex 箭头、下标、符号上下写文字、正方形和三角形
  8. WMS 常用中英文对照
  9. Java之native函数
  10. Android系统模拟位置的使用方法