java z+_Java Z 字形变换
– 题目: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 字形变换相关推荐
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
- Java算法题:Z字形变换
Java算法题:Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行 ...
- java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...
- Java Z 字形变换
- 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- 【LeetCode】6.Z 字形变换
6.Z 字形变换 我的思路貌似没有第二家,不过我懒得解释了. #include <string> #include <iostream> using namespace std ...
- LeetCode Algorithm 6. Z 字形变换
6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...
- leetcode题库:6. Z字形变换
题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/) * 将字符串 &qu ...
- [模拟|字符串] leetcode 6 Z字形变换
[模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...
最新文章
- telegram 创建机器人
- ArcEngine对Blob字段赋值的方法
- 女儿问了我一个问题:什么是抽象?
- CG CTF WEB php decode
- VC程序初始化隐藏窗体
- cnpm安装webpack_Webpack(一)介绍
- leetcode 130 python
- python3 zip函数
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_2 Mybatis的CRUD-保存操作
- delphi7 获取计算机名,远程控制篇:获得网络邻居所有机器名_delphi教程
- 本地js文件上传服务器,原生JS实现前端本地文件上传
- Mybatis中文文档下载地址分享
- 怎样使用WP Review Pro插件?
- 山水功放与音箱接线图_功放音响线接法图解
- arcgis投影坐标转经纬度
- 提前体验让人回归Windows怀抱的Windows Terminal
- react中dispatch_react-redux中连续两次dispatch-actions有顺序吗?
- Day3 算法基本要素
- 12V继电器开关控制
- ROS应用开发入门 服务数据的定义和使用
热门文章
- Matlab---傅里叶变换---通俗理解(一)
- win8.1计算机开启远程桌面连接不上,启动Win8.1远程桌面不得不知的方案
- linux python3.8源码安装_linux 下从源码安装 Python——小白踩坑记
- 彻底关掉win10自动更新_win10系统explorer.exe错误的解决教程
- 很多初接触乐鑫ESP32/ESP8266 模块时,都不清楚怎么为 ESP32、ESP8266 系列模组烧录固件呢?这里以启明云端WT8266-S5(ESP-12F)和ESP32-WROOM模块为例说明
- php隐含值传递,php – jQuery更新隐藏的输入值,但不传递给POST变量
- 柚子壁纸为什么自动安装_墙面壁纸贴完,看这效果丑丑丑!当初没听师傅话,顶角线必须得装...
- python配置日志的几种方式
- Python网络编程(OSI模型、网络协议、TCP)
- 解方程 2014NOIP提高组 (数学)