[LeetCode] ZigZag Conversion
来源:互联网 发布:淘宝买万艾可需要处方 编辑:程序博客网 时间:2024/06/06 11:05
问题:
字符串 “PAYPALISHIRING”按照“之“字型排列如下:
横着读,字符串转换为”PAHNAPLSIIGYIR”
求这个字符转换的算法:string convert(string text, int nRows)
思路:
首先,这肯定是个数学问题。这种有规律的排列一定可以总结出数学公式来。
试试排个n=4的。
看第一行和最后一行,很容易看出来数学公式是啥。
第一行是
这个6又是啥呢。可以再排个n=5位看看,或者直接推算。
总之,结论是
那么,每个字符该放在哪呢。再看一下上面的图形,根据刚才的结论,可以得到结果,对于第i位的字符,应该放在
从数学上看,这个公式相当的不优雅。但从计算机角度,这样刚好容易实现。
再考虑一下边界条件。
边界条件有两个,一个是只有一竖排,一个是只有一横排。
到此就可以写代码了。
public class Solution { public String convert(String s, int numRows) { int length = s.length(); //边界条件 if(length <= numRows || numRows < 2){ return s; } //用数组存一下每一行的数据。StringBuffer.append效率比String+高多了。StringBuilder更好,因为比起StringBuffer没有做线程同步。 ArrayList<StringBuilder> list = new ArrayList<StringBuilder>(); for(int l=0; l< numRows; l++){ list.add(new StringBuilder()); } //除余做个循环,i先映射到index上,然后append到某个stringbuffer上。 for(int i=0; i<length; i++){ int index = (i+1)%(2*numRows-2); //因为index本身是从小到大按序输入的,所以把小于的判断排到前面。 if(index == 0){ list.get(1).append(s.charAt(i)); }else if(index <= numRows){ list.get(index-1).append(s.charAt(i)); }else{ list.get(2*numRows - index -1).append(s.charAt(i)); } } StringBuilder result = new StringBuilder(); for(int l=0;l<numRows;l++){ result.append(list.get(l)); } return result.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
- IOS -- iOS 8 CoreLocation 中状态栏(StatusBar)的细节问题
- PureMVC QA:Where Should I Declare Notification Name Constants
- 19-EMM Procedure 7. Cell Reselection without TAU
- js去掉文本前后空格与阻止表单提交
- 脚本乐园 shell 中对小数进行比较的方法总结
- [LeetCode] ZigZag Conversion
- 前缀、中缀、后缀表达式
- 20-EMM Procedure 8&9. Handover & Cell Reselection with TAU
- 自定义控件属性大全,format
- 【JVM】关于垃圾回收
- Appium 测试,实现上下左右滑动页面
- puremvc 入门与思考
- 线程与进程
- 分享一个链接