题目内容:

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR" 实现一个将字符串进行指定行数变换的函数: string convert(string s, int numRows);
示例 1: 输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"
示例 2: 输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"

  

思路:

找规律的题目,字符串各字母内容不管,找下标的规律,拿上面的第二个样例为例子,下标排列是这样子的

 /*
* 0 6 12
* 1 5 7 11 13
* 2 4 8 10 14
* 3 9
* */

  

可以看出,除去斜边的,每一行都是一个等差数列,例如0,6,12

而斜边的是竖排中的数加上某一个固定值,例如第二行就是1+4=5,7+4=11

然后综合可以总结出规律,等差数列的差是numRows+numRows-2,即2*numRows-2,其实就是同一行相邻数字中隔的数字

然后每一行中间要加的固定值,是前面等差数列的差依次-2,因为每向下一行两个数间隔就少两个数,例如第二行固定值4,第三行固定值就是4-2=2

之后就是用代码实现了,相信也不难写了

if(numRows>s.length()||numRows==1)
return s;
int length = s.length();
int count = numRows*2-2;
int next = 0;
String result = "";
for(int i = 0;i < numRows;i++){
for(int j = i;j < length;){
result = result + s.charAt(j);
next = j + count - 2 * i;
if(i!=0&&i!=numRows-1&&next<length){
//第一行和最后一行竖排中的数加上固定值和这个数字在等差数列的下一个值相等
//所以这两行不管它
result = result + s.charAt(next);
}
j = j + count;
}
}
return result;

  

这个还不是最优解,到时候看看还能不能优化

[LeetCode] Z字型变换的更多相关文章

  1. leetcode 6/300 Z字型变换 py

    目录 题目说明 方法一:利用flag 题目说明 方法一:利用flag 简单来说就是利用flag来表示方向,真的神来之笔. class Solution: def convert(self, s: st ...

  2. leetcode 6 z字型变换

    执行用时 :64 ms, 在所有 Python3 提交中击败了99.74%的用户由题目可知 我们的最终字符串会被摆成 numRows 行,那我们理解为 最终结果是numRows个字符串相加 先建立等于 ...

  3. 06. Z字型变换

    题目: 提交01: class Solution { public String convert(String s, int numRows) { int length = 2*numRows-2; ...

  4. LeetCode OJ:ZigZag Conversion(字符串的Z字型转换)

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  5. 算法:Z字型(Zigzag)编排

    问题:给定 n 行和 m 列的二维数组矩阵.如图所示,以 ZIG-ZAG 方式打印此矩阵. 从对称的角度来看,通过反复施加滑行反射可以从简单的图案如线段产生规则的之字形. 主要思想:算法从(0, 0) ...

  6. LeetCode ZigZag Conversion(将字符串排成z字型)

    class Solution { public: string convert(string s, int nRows) { string a=""; int len=s.leng ...

  7. LeetCode--006--Z字型变换(java)

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...

  8. 281. Zigzag Iterator z字型遍历

    [抄题]: Given two 1d vectors, implement an iterator to return their elements alternately. Example: Inp ...

  9. YTU 2898: C-Z型变换

    2898: C-Z型变换 时间限制: 1 Sec  内存限制: 128 MB 提交: 53  解决: 15 题目描述 让我们来玩个Z型变换的游戏,游戏的规则如下: 给你一个字符串,将它以Z字型的形状不 ...

随机推荐

  1. VS2012智能感知变英文解决办法

    解决办法: 1.从一台没装.NET3.5的机子上复制C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\zh-CN路径下的文件覆盖就可以 2.或者重装中文版的f ...

  2. PHP移植小记

    所需文件: Phpnow 1.5.6 文件夹(D盘): SQL Server2005 x86 安装包(D盘‘安装文件文件夹’): 数据库创建命令:   更改sql server 2005的服务器名称 ...

  3. (转)本地搭建环境wamp下提示不支持GD库的解决方法

    转自:http://www.zzdp.net/local-wamp-gd GD库是什么?GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. ...

  4. 20145232 韩文浩 《Java程序设计》第6周学习总结

    教材学习内容总结 Java是以串流(Stream)的方式来处理输入与输出. 串流是一种抽象观念,从键盘输入资料,将处理结果输入档案,以及读取档案的内容等动作皆视为串流的处理. 输入串流代表对象为jav ...

  5. php实现网站四则运算。

    1.设计思路: 在index.php中建立两个表单,有两个提交,一个跳转到fourArithmeticOperation.php,这里保存用户输入的参数到config.txt中,留给main函数调出. ...

  6. (01背包 先排序)Proud Merchants (hdu 3466)

    http://acm.hdu.edu.cn/showproblem.php?pid=3466   Description Recently, iSea went to an ancient count ...

  7. Spring AOP 中pointcut expression表达式

    原文地址——http://blog.csdn.net/qq525099302/article/details/53996344 Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut ...

  8. Hdu2819 Swap

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. POJ3176 Cow Bowling 2017-06-29 14:33 23人阅读 评论(0) 收藏

    Cow Bowling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19173   Accepted: 12734 Des ...

  10. CI

    做项目时,经常会碰到需要使用php的情况,自己也下决心把php好好学一下. 先从CI开始,再看一下项目中的php代码是如何写的.