ZigZag_Conversion

news/2024/11/20 15:32:18/
题目描述:The string "PAYPALISHIRING" is written in a zigzag( Z字形的)pattern
                 on a given number of rows
                 like this: (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".

PS:解释一下什么是zigzag( Z字形的)pattern,它从左往右是由一个个可重复的矩形单元构成的,每个矩形高是rows,宽是rows-2,
     字母在每个矩形中构成的规则是,先从上到下排最左边一列,然后再从左下到右上排斜对角线,

例如:qwerqwerqwer row=4

           q    e  
           w wr   r
           eq  q e
           r     w

public class ZigZag_Conversion {public static void convert(String str,int row){char array[]=str.toCharArray();if(array.length>=row){//得到一共有几列//count代表有几条高int count=0;for(int k=0;k<array.length;k+=(2*row-2)){count++;}//如果最后一个高后面剩余的数无法组成下一个高,则要将后面的几行都加上int mid=count;int shengyu=array.length-mid*row-(mid-1)*(row-2);if(shengyu>0){count+=shengyu;}count+=(mid-1)*(row-2);//一行一行输出for(int i=0;i<row;i++){String rowstr="";//标记表示矩形长的那一行int times=0;//对每一行空格的记录,用于对矩形宽之间的数据提取int spacecount=1;int midtimes=0;//对一行上的每列做出处理for(int j=1;j<=count;j++){	if(j==times*(row-1)+1){ int pick=(i+times*(2*row-2));pick=(i+times*(2*row-2));if(pick<array.length){rowstr+=array[pick];//midtime作用是在对宽的时候的判断发挥作用//因为times在下一句已经加一,会造成不准确midtimes=times;times++;spacecount=1;}}else{if(i+(j-(times-1)*(row-1))==row){rowstr+=array[spacecount*2+i+midtimes*(2*row-2)];}else{rowstr+=" ";spacecount++;}}}System.out.println(rowstr);}}else{System.out.println("不足以构成一个ZiZag形状");}}public static void main(String[] args){Scanner sc=new Scanner(System.in);String str=sc.next();int row=sc.nextInt();convert(str,row);}
}

如果有看不懂的或者对代码有指教的可以留言探讨一下。


http://www.ppmy.cn/news/579068.html

相关文章

2022年全球市场手机紫外线消毒箱总体规模、主要生产商、主要地区、产品和应用细分研究报告

本文研究全球市场、主要地区和主要国家手机紫外线消毒箱的销量、销售收入等&#xff0c;同时也重点分析全球范围内主要厂商&#xff08;品牌&#xff09;竞争态势&#xff0c;手机紫外线消毒箱销量、价格、收入和市场份额等。针对过去五年&#xff08;2017-2021&#xff09;年的…

ZigZag convert

1 题目 2 分析 (1) 对于第一行与最后一行&#xff0c;每两个相邻元素在原字符串中的距离为2*(nRows-1); (2) 对于非第一行与最后一行的其它行curRow&#xff0c;若锯齿(zigzag)正往下走&#xff0c;则当前字符与下一个字符在原字符中的距离为2*(nRows-curRow-1);若锯齿正往…

ZigZag(c)

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) P A H N A P L S I I G Y I R And then read line by line: “PAHNAPLSIIGYIR” W…

6. ZigZag Conversion

https://leetcode.com/problems/zigzag-conversion/description/ 题目大意&#xff1a;给一个字符串和n&#xff0c;要求按n行的“之”字形来输出 解题思路&#xff1a;如下图&#xff1a; /*nnumRows Δ2n-2 0 2n-2 …

zz - Google Sparsehash

Google Sparsehash 包实现背景&#xff1a;该包由2种类型和HashTable实现组成。Sparse 设计的实现过程中考虑的是空间优先&#xff1b;dense 设计上考虑的是时间优先。设计的注重点不一样&#xff0c;所以实现也不一样。为了和通用的STL相适应&#xff0c;每一种实现提供了hash…

zig-zag旋转

自己写了个&#xff0c;感觉很罗嗦&#xff0c;而且用的是二维的vector&#xff0c;代码比较膨胀。在网上看到一个很精典的代码&#xff0c;粘贴过来&#xff0c;学习一下。 #include<iostream> #include<iomanip> #include<cstring> using namespace std; v…

如何超过大多数人——陈皓(左耳朵耗子)

转载自&#xff1a;酷 壳 – CoolShell 当你看到这篇文章的标题&#xff0c;你一定对这篇文章产生了巨大的兴趣&#xff0c;因为你的潜意识在告诉你&#xff0c;这是一本人生的“武林秘籍”&#xff0c;而且还是左耳朵写的&#xff0c;一定有干货满满&#xff0c;只要读完&…

干货分享:谷歌主动搜索开发客户的万能公式

大家在用谷歌(Google)开发是不是也有以下常见问题&#xff1a; 关键词不准&#xff0c;搜索到的都是零售商&#xff0c;B2C平台搜索到的客户太大&#xff0c;已经被开发多次&#xff0c;开发信不回复搜索到的客户找不到邮箱搜索到的客户与工厂不匹配&#xff0c;无法合作 其实…