– 题目:Z 字形变换

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:

L C I R

E T O E S II G

E D H N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = “LEETCODEISHIRING”, numRows = 3

输出: “LCIRETOESIIGEDHN”

示例 2:

输入: s = “LEETCODEISHIRING”, numRows = 4

输出: “LDREOEIIECIHNTSG”

解释:

L D R

E O E I I

E C I H N

T S G

– 半个暴力法(直接将整个字符串划分为n个2numRows-2 长度的字符串,然后循环读取,最差情况大概是 nnunRows)

//说是有点暴力,但实际上还是可以的,比官方题解快一点点,速度超越大概85%的人还算可以了,空间超过50%的人,应该还可以改进一点点

//最大的缺点大概是代码有点长,考虑的情况有点多,调试花了比较长时间

class Solution {

public String convert(String s, int numRows) {

if(s.length()<=numRows||numRows==1)

return s;

int n=s.length()/(2*numRows-2)+(s.length()%(2*numRows-2)==0?0:1);

String[] strs=new String[n];

StringBuilder result = new StringBuilder();

for(int i=0;i

if(2*(i+1)*(numRows-1)>=s.length())

strs[i]=s.substring(2*i*(numRows-1),s.length());

else

strs[i]=s.substring(2*i*(numRows-1),2*(i+1)*(numRows-1));

}

for(int j=0;j

if(j==0){

for(int k=0;k

result.append(strs[k].substring(0,1));

}

}

else if(j==numRows-1){

for(int k=0;k

if(strs[k].length()>=numRows)

result.append(strs[k].substring(numRows-1,numRows));

}

}

else{

for(int k=0;k

if(strs[k].length()>j){

result.append(strs[k].substring(j,j+1));

if(strs[k].length()>2*numRows-j-2)

result.append(strs[k].substring(2*numRows-j-2,2*numRows-j-1));

}

}

}

}

return result.toString();

}

}

– 规律公式法(这个方法很好写,也很好记,强烈推荐)

//用时比上一个增加10ms左右,不过这个是真好写,而且超容易调试

class Solution {

public String convert(String s, int numRows) {

if(s.length()<=numRows||numRows==1)

return s;

StringBuilder result = new StringBuilder();

for(int i=0;i

if(i==0){

for(int j=0;j

result.append(s.charAt(j));

}

else if(i==numRows-1){

for(int j=numRows-1;j

result.append(s.charAt(j));

}

else{

for(int j=i;j

result.append(s.charAt(j));

if(j+2*numRows-2-2*i

result.append(s.charAt(j+2*numRows-2-2*i));

}

}

}

return result.toString();

}

}

java z+_Java Z 字形变换相关推荐

  1. Z 字形变换 C++实现 java实现 leetcode系列(六)

    Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...

  2. Java算法题:Z字形变换

    Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...

  3. java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...

  4. Java Z 字形变换

    - 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: ...

  5. Java实现 LeetCode 6 Z字形变换

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

  6. 【LeetCode】6.Z 字形变换

    6.Z 字形变换 我的思路貌似没有第二家,不过我懒得解释了. #include <string> #include <iostream> using namespace std ...

  7. LeetCode Algorithm 6. Z 字形变换

    6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...

  8. leetcode题库:6. Z字形变换

    题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/)  * 将字符串 &qu ...

  9. [模拟|字符串] leetcode 6 Z字形变换

    [模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...

最新文章

  1. telegram 创建机器人
  2. ArcEngine对Blob字段赋值的方法
  3. 女儿问了我一个问题:什么是抽象?
  4. CG CTF WEB php decode
  5. VC程序初始化隐藏窗体
  6. cnpm安装webpack_Webpack(一)介绍
  7. leetcode 130 python
  8. python3 zip函数
  9. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_2 Mybatis的CRUD-保存操作
  10. delphi7 获取计算机名,远程控制篇:获得网络邻居所有机器名_delphi教程
  11. 本地js文件上传服务器,原生JS实现前端本地文件上传
  12. Mybatis中文文档下载地址分享
  13. 怎样使用WP Review Pro插件?
  14. 山水功放与音箱接线图_功放音响线接法图解
  15. arcgis投影坐标转经纬度
  16. 提前体验让人回归Windows怀抱的Windows Terminal
  17. react中dispatch_react-redux中连续两次dispatch-actions有顺序吗?
  18. Day3 算法基本要素
  19. 12V继电器开关控制
  20. ROS应用开发入门 服务数据的定义和使用

热门文章

  1. Matlab---傅里叶变换---通俗理解(一)
  2. win8.1计算机开启远程桌面连接不上,启动Win8.1远程桌面不得不知的方案
  3. linux python3.8源码安装_linux 下从源码安装 Python——小白踩坑记
  4. 彻底关掉win10自动更新_win10系统explorer.exe错误的解决教程
  5. 很多初接触乐鑫ESP32/ESP8266 模块时,都不清楚怎么为 ESP32、ESP8266 系列模组烧录固件呢?这里以启明云端WT8266-S5(ESP-12F)和ESP32-WROOM模块为例说明
  6. php隐含值传递,php – jQuery更新隐藏的输入值,但不传递给POST变量
  7. 柚子壁纸为什么自动安装_墙面壁纸贴完,看这效果丑丑丑!当初没听师傅话,顶角线必须得装...
  8. python配置日志的几种方式
  9. Python网络编程(OSI模型、网络协议、TCP)
  10. 解方程 2014NOIP提高组 (数学)