Leetcode-- ZigZag Conversion
来源:互联网 发布:清华网络教学平台 编辑:程序博客网 时间:2024/06/16 16:07
首先要明白什么是ZigZag走法。
以题目中的"PAYPALISHIRING"
为例
P A H NA P L S I I GY I RZigZag走法是在走向垂直往下,再倾斜往上的
P A H NA P L S I I GY I R所以可以看出在交替着走红色的路和绿色的路。
红色的路是顺着的,绿色的路是逆着的。
在写代码的时候特别要注意index的问题。
一开始选用List存储字符,代码如下:
public String convert(String s, int numRows) { if (s == null || s.length() == 0 || numRows == 1) { return s; } List<List<Character>> store = new ArrayList<>(); for (int i = 0; i < numRows; i++) { store.add(new ArrayList<>()); } store.get(0).add(s.charAt(0)); int start = 1; while (start < s.length()) { for (int i = 1; i < numRows; i++) { if (start < s.length()) { store.get(i).add(s.charAt(start)); start++; } else { break; } } for (int i = numRows - 2; i >= 0; i--) { if (start < s.length()) { store.get(i).add(s.charAt(start)); start++; } else { break; } } } StringBuilder sb = new StringBuilder(); for (List<Character> list : store) { for (Character c : list) { sb.append(c + ""); } } return sb.toString(); }
后来,进行了改进,直接选择用StringBuilder存储。
时间提升了一半。
改进后的代码:
public String convert(String s, int numRows) { if (s == null || s.length() == 0 || numRows == 1) { return s; } List<StringBuilder> store = new ArrayList<>(); for (int i = 0; i < numRows; i++) { store.add(new StringBuilder()); } store.get(0).append(s.charAt(0)); int start = 1; while (start < s.length()) { for (int i = 1; i < numRows; i++) { if (start < s.length()) { store.get(i).append(s.charAt(start)); start++; } else { break; } } for (int i = numRows - 2; i >= 0; i--) { if (start < s.length()) { store.get(i).append(s.charAt(start)); start++; } else { break; } } } StringBuilder sb = new StringBuilder(); for (StringBuilder builder : store) { sb.append(builder); } return sb.toString(); }
1 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
- 广泛JBOSS后门的一大威胁
- mysql中GROUP BY 分组查询
- Java程序使用HASP加密狗加密保护的操作步骤--手把手包你学会
- Map集合中value()方法与keySet()、entrySet()区别
- 1.2 简单的C++程序实例
- Leetcode-- ZigZag Conversion
- 于神之怒加强版 [Bzoj 4407]
- 1.3 C++的词法单位
- OpenGL ES 2.0Shader相关介绍
- 迭代器模式
- 1.4 C++的数据类型
- 1.5 变量和常量
- 1.6 运算符和表达式
- volley文件上传