LeetCode java实现ZigZagConversion
2015-07-21 14:21
453 查看
题目地址:https://leetcode.com/problems/zigzag-conversion/
题目内容:就是说假设有一个字符串及行数,那么我们可以把他按顺序摆成一个锯齿的形状,例如,给定的字符串为"abcdefghijklmnopq",给定行数是4,那么可以把它摆成如下的锯齿形状:
现在,我们需要根据摆成的锯齿形状,得到一个新的字符串,这个字符串是按行读取的,忽略空格。也就是"agmbfhlnceikoqdjp"。
好了,大意就是这样,那么该如何解呢?大部分解法都是计算位置,就是找规律,得到每一行会有哪些位置的字符。这种解法当然是可以的,也很简单。现在我提供另一种思路:按顺序模拟字母的摆放过程。假如给定字符串是"abcdefghijk",给定行数是5,那么我们该如何摆呢?我们新建5个字符串来存放每一行的字符,a肯定放在第一行,则第一行加上a,b放在第二行则第二行加上b...只要注意拐弯就好。拐弯也很简单,以前是行数加一,则拐弯就变成行数减一。思路很清晰,具体代码如下:
题目内容:就是说假设有一个字符串及行数,那么我们可以把他按顺序摆成一个锯齿的形状,例如,给定的字符串为"abcdefghijklmnopq",给定行数是4,那么可以把它摆成如下的锯齿形状:
/** * abcdefghijklmnopq * * a g m * b f h l n * c e i k o q * d j p * * */
现在,我们需要根据摆成的锯齿形状,得到一个新的字符串,这个字符串是按行读取的,忽略空格。也就是"agmbfhlnceikoqdjp"。
好了,大意就是这样,那么该如何解呢?大部分解法都是计算位置,就是找规律,得到每一行会有哪些位置的字符。这种解法当然是可以的,也很简单。现在我提供另一种思路:按顺序模拟字母的摆放过程。假如给定字符串是"abcdefghijk",给定行数是5,那么我们该如何摆呢?我们新建5个字符串来存放每一行的字符,a肯定放在第一行,则第一行加上a,b放在第二行则第二行加上b...只要注意拐弯就好。拐弯也很简单,以前是行数加一,则拐弯就变成行数减一。思路很清晰,具体代码如下:
public String convert(String s,int numRows){ String result = ""; List<String> lines = new ArrayList<String>(); for(int i=0;i<numRows;i++){ lines.add(""); } int size = s.length(); int linePoint = 0; boolean addMode = true; for(int j=0;j<size;j++){ lines.set(linePoint,lines.get(linePoint)+s.charAt(j)); if (addMode) { linePoint++; if(linePoint>numRows-1&&numRows>1){ linePoint = numRows-2; addMode = false; }else if (linePoint>numRows-1) { linePoint = 0; addMode = false; } }else { linePoint--; if(linePoint<0&&numRows>1){ linePoint = 1; addMode = true; }else if (linePoint<0) { linePoint = 0; addMode = true; } } } int lineSize = lines.size(); for(int k=0;k<lineSize;k++){ result = result +lines.get(k); } return result; }
相关文章推荐
- java.lang.IllegalArgumentException:Document base ……does not exist or is not a readable directory错误的解决方案
- Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理 .
- JAVA多线程读写文件范例
- 基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
- javaweb通过SMS短信通API实现短信发送功能
- Java的内存机制
- java导出Excel
- 解决 eclipse 新建 maven 后无法显示 src/main/java 和 src/main/test
- 决策树算法---java
- 【j2ee spring】46、巴巴运动网——购物车
- LeetCode java实现Add Two Numbers
- Java Timer的使用(timer.schedule定时执行)
- 对JAVA的一些个人总结——面向对象
- java错误篇一
- 朴素贝叶斯分类算法-----java
- springmvc笔记
- Spring Resource
- Spring 事务管理原理探究
- spring配置和dubbo
- Java基础总结(二)