[LeetCode
来源:互联网 发布:java 日期格式化 时区 编辑:程序博客网 时间:2024/05/17 23:20
1 问题
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 text, int nRows)
;
convert("PAYPALISHIRING", 3)
should return “PAHNAPLSIIGYIR”.
2 分析
该问题可以这样理解:根据给定字符串S
, 逐一将S
中的字符变换到一个二维矩阵中特定的位置上(这个位置用(row,col)
表示),再逐行将二维矩阵输出 。即, 对S
中每一个字符的下标进行如下变换:
按照题意,这个变换可以按照从上到下,再从下到上的顺序交替进行,伪代码如下:
- 初始化
nRow
个字符串,表示二维矩阵:stringMatrix = String[nRow]
- 令
index
表示给定字符中的数组下标,初始化为0
。 - 令
row
表示二维矩阵中每一行的下标 - 进行如下循环,循环终止的条件是
index >= n
:row = 0
- 进行内循环,表示从上到下对二维矩阵的一列进行复制, 终止条件是
row >= nRow
stringMatrix[row] += S[index]
row = row + 1
index = index + 1
row = nRow - 2
- 进行内循环,表示从下到上对二维矩阵的一列进行复制, 终止条件是
row <= 1
stringMatrix[row] += S[index]
row = row - 1
index = index + 1
- 返回由
stringMatrix
组成的字符串
该算法遍历字符串一遍,时间复杂度是
3 代码[1]
public String convert(String s, int nRows) { char[] c = s.toCharArray(); int len = c.length; StringBuffer[] sb = new StringBuffer[nRows]; for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer(); int i = 0; while (i < len) { for (int idx = 0; idx < nRows && i < len; idx++) // vertically down sb[idx].append(c[i++]); for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up sb[idx].append(c[i++]); } for (int idx = 1; idx < sb.length; idx++) sb[0].append(sb[idx]); return sb[0].toString();}
其中使用StringBuilder
是为了增加字符串连接的效率。
[1]代码来源:discuss.leetcode.com
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- Webview控件的使用
- java基础 01 从零开始,每次都有新发现
- NYOJ 单词拼接(求有向图的欧拉通路)
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- JPA注解
- [LeetCode
- 详解CorelDRAW双色图样填充
- 内容垂直居中
- Envy(最大值前后缀 +双指针 + 二分)
- sessionstorage,localstorage和cookie之间的区别
- 【小程序】POST请求服务器接收不到参数
- PhpStorm中如何使用database工具,详细操作方法
- 面向对象的编程初学
- Java学习之泛型