Leetcode: ZigZag Conversion
来源:互联网 发布:js如何实现弹窗 编辑:程序博客网 时间:2024/06/02 02:35
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"
.This can be done mathematically. Note the step 2(nRows - 1). O(n) time and O(1) space. Code is as follows:
public String convert(String s, int nRows) { if(s == null || s.length()==0 || nRows <=0) return ""; if(nRows == 1) return s; StringBuilder res = new StringBuilder(); int size = 2*nRows-2; for(int i=0;i<nRows;i++) { for(int j=i;j<s.length();j+=size) { res.append(s.charAt(j)); if(i!=0 && i!=nRows-1 && j+size-2*i<s.length()) res.append(s.charAt(j+size-2*i)); } } return res.toString(); }
Can also use an string array of size nRows, for less computation. Put the characters in the nRows strings in a zigzag order, and concatenate them. This requires O(n) time and O(nRows) space.
public class Solution { public String convert(String s, int nRows) { if (s == null || s.length() == 0) { return s; } StringBuilder[] sbs = new StringBuilder[nRows]; for (int i = 0; i < nRows; i++) { sbs[i] = new StringBuilder(); } int pos = 0; boolean topDown = true; for (int i = 0; i < s.length(); i++) { sbs[pos].append(s.charAt(i)); if (nRows != 1) { if (topDown) { pos++; } else { pos--; } } if (pos == nRows - 1) { topDown = false; } else if (pos == 0) { topDown = true; } } StringBuilder res = new StringBuilder(); for (int i = 0; i < nRows; i++) { res.append(sbs[i]); } return res.toString(); }}
0 0
- LeetCode: ZigZag Conversion
- LeetCode : ZigZag Conversion
- leetcode 13:zigzag conversion
- [LeetCode] Zigzag Conversion
- LeetCode 6 - ZigZag Conversion
- Leetcode : ZigZag Conversion
- 【leetcode】Zigzag Conversion
- [LeetCode]ZigZag Conversion
- leetcode ZigZag Conversion
- LeetCode-ZigZag Conversion
- LeetCode ZigZag Conversion
- LeetCode 6: ZigZag Conversion
- leetcode-006:ZigZag Conversion
- Leetcode: ZigZag Conversion
- [LeetCode]ZigZag Conversion
- [LeetCode] ZigZag Conversion
- [LeetCode]ZigZag Conversion
- leetcode: ZigZag Conversion
- wpa_cli P2P 连接相关调试命令
- Android 5.0一些变化
- GreenDao讲义4:带你总览Feature
- Juce源码分析(一)Juce的优势
- iOS开发者一些有用的技术博客、设计文章、网站
- Leetcode: ZigZag Conversion
- 字符函数库 cctype
- 设计模式——装饰模式(Decorator Pattern)
- HashMap二三事
- VS2013 Windows7(X64被测试)安装方法 离线安装
- 用 Tomcat 和 Eclipse 开发 Web 应用程序
- 程序员博客参考
- 获取bcd码的长度
- 深入解析Ajax($.post和$.get的主要区别)——系列(二)