LeetCode--ZigZag Conversion

来源:互联网 发布:广数g92车英制螺纹编程 编辑:程序博客网 时间:2024/06/15 02:34

问题描述

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)

ZigZag Pattern

And 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”.

解决方案

找到ZigZag每一行的步长规律:第一行和最后一行都只有一种步长;中间的行为两种步长间隔增加

代码

public class ZigZagConversion {    public String convert(String s, int numRows) {        if(s.length() == 0)            return "";        if(numRows==1)            return s;        //get the raw characters array        char[] raw = s.toCharArray();        int length = raw.length;        char[] result = new char[length];        //calculate the steps        int outerStep = 2*numRows-2;        int innerStep_first = 0;        int innerStep_second = 0;        int current = 0;        int pos = 0;        for(int row=0; row < numRows; row++){            if(row==0 || row==numRows-1){ //for the first and last row                pos = row;                while(pos < length){                    result[current++] = raw[pos];                    pos += outerStep;                }            }else{                innerStep_first = outerStep - row*2;                innerStep_second = outerStep - innerStep_first;                pos = row;                boolean stepSwitch = false; //need to switch innerstep                while(pos < length){                    if(!stepSwitch){                        result[current++] = raw[pos];                        pos += innerStep_first;                        stepSwitch = true;                    }else{                        result[current++] = raw[pos];                        pos += innerStep_second;                        stepSwitch = false;                    }                }            }        }        String r = String.valueOf(result);        return r;    }
0 0
原创粉丝点击