LeetCode java实现ZigZagConversion

来源:互联网 发布:linux开发环境 编辑:程序博客网 时间:2024/05/17 02:23

题目地址:https://leetcode.com/problems/zigzag-conversion/

题目内容:就是说假设有一个字符串及行数,那么我们可以把他按顺序摆成一个锯齿的形状,例如,给定的字符串为"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;}


0 0
原创粉丝点击