当前位置:网站首页>LeetCode之6 ZigZag Conversion
LeetCode之6 ZigZag Conversion
2022-07-27 05:01:00 【圆师傅】
1.Description
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”
Write the code that will take a string and make this conversion given a number of rows:
string convert(string s, int numRows);
2. TC
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:
P I N
A L S I G
Y A H R
P I
Example 3:
Input: s = "A", numRows = 1
Output: "A"
3.Solution
public String convert(String s, int numRows) {
if(numRows == 1)
return s;
List<StringBuilder> ans = new ArrayList<>();
for (int i = 0; i <= Math.min(numRows, s.length()); i++) {
ans.add(new StringBuilder());
}
boolean goingDown = false;
int curRow = 0;
for(char c : s.toCharArray()) {
ans.get(curRow).append(c);
if (curRow == 0 || curRow == numRows -1)
goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
StringBuilder sb = new StringBuilder();
for(StringBuilder chars: ans){
sb.append(chars);
}
return sb.toString();
}
思路:
然后用一个list存放每一行的内容,每一行的内容是不连贯,因此用StringBuilder来拼接字符串。
然后根据重上倒下还是重下到上的方向来决定是在哪一行。
最后把所有StringBuilder拼接成一个完整的字符串。
public String convert(String s, int numRows) {
if(numRows == 1)
return s;
StringBuilder sb = new StringBuilder();
int n = s.length();
int df = 2*numRows -2;
for (int i = 0; i < numRows; i++) {
for (int j = 0; j + i < n; j+=df ) {
sb.append(s.charAt(i + j));
if (i != 0 && i != numRows - 1 && j -i +df < n) {
sb.append(s.charAt(j - i + df));
}
}
}
return sb.toString();
}
逐行读取Z字形的内容,要算出两个点之间的差值,找到其规律。
P I N
A L S I G
Y A H R
P I
以上图为例,第一行的三个字符P, I, N,在原字符串中下标分别为0, 6, 12,差值为6,这个值和行数有关,3行差值为4,得出的规律是2* 行数-2;
对于中间的行数,就是j-i+df
边栏推荐
- Deep Qt5 signal slot new syntax
- Detailed description of polymorphism
- 树莓派rtmp推流本地摄像头图像
- JVM Part 1: memory and garbage collection part 10 - runtime data area - direct memory
- B1030 完美数列
- Flexible array and common problems
- [untitled] I is circularly accumulated under certain conditions. The condition is usually the length of the loop array. When it exceeds the length, the loop will stop. Because the object cannot judge
- JVM上篇:内存与垃圾回收篇九--运行时数据区-对象的实例化,内存布局与访问定位
- ERROR! MySQL is not running, but PID file exists
- Invert a Binary Tree
猜你喜欢

SSM framework integration

How to store the startprocessinstancebykey method in acticiti in the variable table

JVM Part 1: memory and garbage collection part 9 - runtime data area - object instantiation, memory layout and access location

2021 OWASP top 6-10 collection

JVM Part 1: memory and garbage collection part 12 -- stringtable

Another skill is to earn 30000 yuan a month+

JVM上篇:内存与垃圾回收篇九--运行时数据区-对象的实例化,内存布局与访问定位

QT menu bar, toolbar and status bar

Detailed description of polymorphism

整合SSM
随机推荐
Introduction to MySQL optimization
TypeScript 详解
Could not autowire. No beans of ‘userMapper‘ type found.
Explore the mysteries of the security, intelligence and performance of the universal altek platform!
Shell course summary
Transaction database and its four characteristics, principle, isolation level, dirty read, unreal read, non repeatable read?
数据库设计——关系数据理论(超详细)
Li Kou achieved the second largest result
DBUtils
求组合数(最强优化)
SSM framework integration
JVM Part 1: memory and garbage collection part 11 -- execution engine
Row, table, page, share, exclusive, pessimistic, optimistic, deadlock
Static and final keyword learning demo exercise
Derivation and explanation of PBR physical illumination calculation formula
Interface and abstract class / method learning demo
How to test the payment process?
智慧展厅设计的优势及适用行业分析
Introduction to Web Framework
Use of collection framework