Leet Code 6 ZigZag Conversion
来源:互联网 发布:淘宝类目007是什么牌子 编辑:程序博客网 时间:2024/05/01 06:37
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 NA P L S I I GY I RAnd 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"
.【算法思路】
首先自己写一串字符串,给不同的numRows来看结果是什么,然后找规律啊。
我发现按照行进行遍历,打印完行首字符后,以后都是每两个(设为: a,b)一起出现(除非b越界了),a距离a所在行首的间隔为 2*numRows - 2 - 2*i
i 为所在行号,从0开始。 b距离a的间隔为 2*i。
因此可以每次都打印有效的a,b,依次遍历。对于首行和尾行可以特殊考虑。
【复杂度】
时间: O(n)
【CODE】
public String convert(String s, int numRows) {int len = s.length();if (numRows <= 1 || len <= numRows) {return s;}StringBuilder sb = new StringBuilder();int tmp = 2 * numRows - 2;sb.append(s.charAt(0));for (int index = tmp; index < len; index += tmp) {sb.append(s.charAt(index));}for (int i = 1; i < numRows - 1; i++) {int index = tmp - 2 * i;sb.append(s.charAt(i));while (index + i < len) {sb.append(s.charAt(index + i));if (index + 3 * i < len) {sb.append(s.charAt(index + 3 * i));} else {break;}index += tmp;}}int index = numRows - 1;while (index < len) {sb.append(s.charAt(index));index += tmp;}return sb.toString();}
2. 数学题。巨无聊的一道题,真正面试过程中,不大可能出这种问题。
n=4
P I N
A L S I G
Y A H R
P I
N=5
P H
A S I
Y I R
P L I G
A N
所以,对于每一层主元素(红色元素)的坐标 (i,j)= (j+1 )*n +i
对于每两个主元素之间的插入元素(绿色元素),(j+1)*n -i
[Code]
1: string convert(string s, int nRows) { 2: // Start typing your C/C++ solution below 3: // DO NOT write int main() function 4: if(nRows <= 1) return s; 5: string result; 6: if(s.size() ==0) return result; 7: for(int i =0; i< nRows; i++) 8: { 9: for(int j =0, index =i; index < s.size(); 10: j++, index = (2*nRows-2)*j +i) 11: { 12: result.append(1, s[index]); //red element13: if(i ==0 || i == nRows-1) //green element14: { 15: continue; 16: } 17: if(index+(nRows- i-1)*2 < s.size()) 18: { 19: result.append(1, s[index+(nRows- i-1)*2]); 20: } 21: } 22: } 23: return result; 24: }
- Leet Code 6 ZigZag Conversion
- 【Leet Code】ZigZag Conversion
- ZigZag Conversion @leet code java
- leet code 006:ZigZag Conversion
- CODE 124: ZigZag Conversion
- LeetCode 6 - ZigZag Conversion
- LeetCode 6: ZigZag Conversion
- LeetCode(6)ZigZag Conversion
- Leetcode【6】:ZigZag Conversion
- [leetcode 6] ZigZag Conversion
- LeetCode 6 ZigZag Conversion
- LeetCode(6) ZigZag Conversion
- [Leetcode] 6 - ZigZag Conversion
- LeetCode 6:《ZigZag Conversion》
- [leetcode 6] ZigZag Conversion
- LeetCode | #6 ZigZag Conversion
- 6、ZigZag Conversion
- [leetcode] 6 ZigZag Conversion
- 第一页,现在的自己写给未来的我。
- Html学习笔记3
- 排序算法
- JDK升级导致TLS证书认证失败
- 非阻塞的AlertDialog的代码实现
- Leet Code 6 ZigZag Conversion
- Redis--aof备份恢复
- POJ 1731:Orders next_permutation
- 从零开始编写图片加载库(五)之图片缓存DiskCache
- 图解测试之稳定性-如何开始稳定性测试
- C++枚举类型
- hdu 5122 简单题
- Html学习笔记5
- android笔记