【LeetCode】6.ZigZag Conversion N型排列问题

2024-04-14 07:08

本文主要是介绍【LeetCode】6.ZigZag Conversion N型排列问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

         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:

        

         convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".


理解:

          给定一个字符串,将其按照N型排列后,输出按照每一行读取的结果。


分析: 

         题目中给定的例子并不能很好地解释题目的意思,仍以上面的例子为例,若给定nRows=4,按照N型排列后应该是下面的形状:

       

        返回的结果应该是:PINALSIGYAHRPI   。

        若将字符换成它在字符串中的下标,就可以找出一定规律,扫描一遍字符串,便可以得出结果。下标表示如下:

                                     

                   (nRows=3)                                                       (nRows=4)

          我的做法是可以将字符串按照下面的方式分组,N型排列后的字符串总是按照组的形状重复,除了最后一组可能不是一个完整的组。显然,每一组字符的个数为(nRows+nRows-2)  :

                                

                   (nRows=3)                                                               (nRows=4)                          

          第i个字符在它所在组中的顺序可以用 i%(nRows+nRows-2) 表示。可以用一个大小为nRows的字符数组string strs[nRows]来存储每一行的字符,strs[j]即存储排列后第j行的字符,那么这个问题就转化为根据下标将字符放到相应行的string中,最后按顺序将nRows个string连接起来返回最终结果。字符下标与它所在的行有下面这样的规律:

          (1)若 i%(nRows+nRows-2)<nRows,s[i]在i%(nRows+nRows-2)行;

          (2)若 i%(nRows+nRows-2)>nRows,s[i]在s[i-1]的上一行。

           根据这个规律,便可以得到正确结果。需要注意的是(nRows+nRows-2)<=0的情况。


代码:
  

class Solution {
public:string convert(string s, int numRows) {int n=2*numRows-2;if(n<=0)return s;string strs[numRows];for(int i=0;i<numRows;i++)strs[i]="";int lastRow;for(int i=0;i<s.length();i++){int temp=i%n;if(temp<numRows){strs[temp]+=s[i];lastRow=temp;}else{strs[--lastRow]+=s[i];}}string result="";for(int i=0;i<numRows;i++){result+=strs[i];}return result;}
};

 









这篇关于【LeetCode】6.ZigZag Conversion N型排列问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902392

相关文章

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.

如何清理MySQL中的binlog问题

《如何清理MySQL中的binlog问题》:本文主要介绍清理MySQL中的binlog问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目http://www.chinasem.cn录清理mysql中的binlog1.查看binlog过期时间2. 修改binlog过期

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr