ZigZag Conversion an interesting approach

问题描述

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)

P   A   H   N
A P L S I I G
Y   I   R
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".


解决方法

这道题我一直从n阶方阵与数组索引的关系上下手,没想到这个方法这么简单。


从串的索引0开始,一直到结尾,按正序遍历,将每个字符按照第0行放一个,第1行放一个......第numRow行放一个,第numRow-1行放一个,......第0行放一个..........这种循环来放字符。用变量incre来控制行之间的来回循环,直至串尾。

本解法抓住了只需打印每一行的串,而不需要知道每个字符的绝对位置,只需要相对位置(即前后顺序对就行)这个点,从而一举解决问题。


 public String convert(String s, int numRows) {
        if(numRows<=1)return s;
        StringBuilder[] sb=new StringBuilder[numRows];
        for(int i=0;i

时间复杂度,0(n)

你可能感兴趣的:(算法and数据结构)