LeetCode-006-Z 字形变换
Z 字形变换
题目描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:遍历
首先要判断当字符串的长度为空或者小于3的时候或numRows为1(即全部平铺在一行)时,直接返回字符串。否则,遍历字符串的字符,并用一个二维boolean数组标记,分2步,首先往下走,走不动了,再往右斜线走,重复这2步,直到把所有的字符都记录到,根据boolean数组的标记,返回结果。
public class Solution {
public static String convert(String s, int numRows) {
if (s == null || s.length() < 3 || numRows == 1) {
return s;
}
char[][] chars = new char[numRows][s.length()];
boolean[][] flags = new boolean[numRows][s.length()];
int x = -1, y = 0, count = 0;
while (count < s.length()) {
while (x < numRows && count < s.length()) {
if (x + 1 < numRows) {
x++;
chars[x][y] = s.charAt(count);
flags[x][y] = true;
count++;
} else {
break;
}
}
while (x >= 0 && count < s.length()) {
if (x - 1 >= 0) {
x--;
y++;
chars[x][y] = s.charAt(count);
flags[x][y] = true;
count++;
} else {
break;
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
for (int j = 0; j < chars[i].length; j++) {
if (flags[i][j]) {
sb.append(String.valueOf(chars[i][j]));
}
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(convert("ABC", 1));
}
}
LeetCode-006-Z 字形变换的更多相关文章
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- [LeetCode] 6. Z 字形变换
题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...
- LeetCode 6. Z字形变换(ZigZag Conversion)
题目描述 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"P ...
- Leetcode(6)Z字形变换
Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- Leetcode题库——6.Z字形变换
@author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...
- LeetCode Golang 6. Z 字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
- 【LeetCode】ZigZag Conversion(Z 字形变换)
这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- leetcode刷题六<z字形变换>
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐 ...
随机推荐
- 常见线程池 newFixedThreadPool 的简单使用
package com.aaa.threaddemo; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurr ...
- CKKS加密方案
本文内容来自"Protecting Privacy throughHomomorphic Encryption",主要学习里面的CKKS部分. CKKS是一种同态加密方案,其安全性 ...
- Promise、Generator、Async有什么区别?
前言 我们知道Promise与Async/await函数都是用来解决JavaScript中的异步问题的,从最开始的回调函数处理异步,到Promise处理异步,到Generator处理异步,再到Asyn ...
- Html CSS的三种链接方式
感谢原文:https://blog.csdn.net/abc5382334/article/details/24260817 感谢原文:https://blog.csdn.net/jiaqingge/ ...
- 修改注册表使win server 2012R2开机进入桌面而不是开始界面
首先,使用WIN+R快捷键打开运行命令,使用命令打开注册表编辑器 然后,进入注册表之后,我们一次定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ ...
- Ext原码学习之Ext.js
1 // JavaScript Document 2 //定义全局Ext变量 3 var Ext = Ext ||{}; 4 Ext._startTime = new Date().getTime() ...
- 彻底搞清楚class常量池、运行时常量池、字符串常量池
彻底搞清楚class常量池.运行时常量池.字符串常量池 常量池-静态常量池 也叫 class文件常量池,主要存放编译期生成的各种字面量(Literal)和符号引用(Symbolic Reference ...
- 编译安装 tree 命令
文章目录 下载源码包 编译源码包 tree下载地址:http://mama.indstate.edu/users/ice/tree/ Centos发行版,可以直接使用命令 yum -y install ...
- HBase学习记录-API
delete.addColumns()和delete.addColumn()的区别 /** * delete.addColumns(); * delete.addColumn(); * 区别: * a ...
- 为什么在数据驱动的路上,AB 实验值得信赖?
在线AB实验成为当今互联网公司中必不可少的数据驱动的工具,很多公司把自己的应用来做一次AB实验作为数据驱动的试金石. 文 | 松宝 来自 字节跳动数据平台团队增长平台 在线AB实验成为当今互联网公司中 ...