博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6 ZigZig Conversion[M]Z字形变换
阅读量:5259 次
发布时间:2019-06-14

本文共 1601 字,大约阅读时间需要 5 分钟。

题目

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 fixed font for better legibility)

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 s, int numRows);

Example:

  Input: s= "ABCDEFGHIJKLMNOP", numRows = 4,
  Output:AGMBFHLNCEIKODJP
  Explanation:
    A G M
    B F H L N
    C E I K O
    D J P

思路:

先将字符串\(s\)进行Z字排列,再按行读取字符。将Z字分为上中下三个部分,则例子的Z上:ABCD,中:EF,下:GHIJ。分析其规律可以发现,对于指定的行数\(n\),中部的个数为\(n-2\),将每一个上+中作为一个循环,则循环周期为\(t=n+n-2\)。于是有

第1行:\(s[0], s[0+t],s[0+2 \cdot t], \cdots ;\)
第2行:\(s[1], s[0+t-1],s[1+t],\cdots;\)
\(\cdots\)
\(n\)行:\(s[n-1],s[n-1+t],s[n-1+2 \cdot t]\cdots .\)

C++

class solution{public:  string convert(string s, int numRows){    if(s.size()==1) return s;    string resString;    int stringLen=s.size();    int cycleLen=2*numRows-2;    for(int i=0;i

python

class Solution(object):    def convert(self, s, numRows):        """        :type s: str        :type numRows: int        :rtype: str        """                if numRows == 1:            return s                rows = [""]*numRows                cycle = 2*numRows - 2        result = ""                level = 0 #层数        aux = -1        for i in s:            rows[level] += i            if(level == 0 or level == numRows -1):                aux *= -1            level += aux                for i in rows:            result += i                            return result

转载于:https://www.cnblogs.com/Jessey-Ge/p/10993428.html

你可能感兴趣的文章
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
crypto加密
查看>>
Apache Jackrabbit 2.6.0 发布
查看>>
echarts饼图显示百分比
查看>>
JMS消息
查看>>
16位整数,32位整数,64位整数
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
【译】在Transformer中加入相对位置信息
查看>>
大四java实习生的一些经历
查看>>
python programming
查看>>
线程池的概念
查看>>
USB打印机开钱箱
查看>>
mysql数据库 中文乱码
查看>>
Linux下Mysql数据库互为主从的配置过程
查看>>
ECSHOP系统,数据库表名称、结构
查看>>
Python Web开发框架Django
查看>>
【Install】我是如何安装Linux类系统的
查看>>
作业三4
查看>>