LeetCode 6


### Description:

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) And then read line by line: "PAHNAPLSIIGYIR"

  • 题意:
    将字符串 zigzag 排布, 然后按行重新排序。 (zigzag就是先竖直向下, 然后斜向上)

  • 思路:
    找规律即可, 定义一个one_step, 含义为一个zigzag组别的长度, 第一行是由0 + 0 * one_step, 0 + 1 * one_step ... 类推,其中第一行和最后一行为特殊行, 一个组别中只有一个值, 别的行一个组别中有两个值, 具体看代码


Example:


  1. convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".


代码


Golang

func convert(s string, numRows int) string {
	m := make([]byte, 0)
	l := len(s)
	if numRows == 1 {
		return s
	}
	// 这个one_step是一个zigzag组别的长度ss
	one_step := 2*numRows - 2
	for i := 0; i < numRows; i++ {
		if i == 0 || i == (numRows-1) {
			for x := i; x < l; x += one_step {
				m = append(m, s[x])
			}
		} else {
			x, y := i, 2*(numRows-1)-i
			for x < l || y < l {
				if x < l {
					m = append(m, s[x])
				}
				if y < l {
					m = append(m, s[y])
				}
				x += one_step
				y += one_step
			}
		}
	}
	return string(m)
}

posted @ 2018-03-13 21:26  shengwudiyi  阅读(108)  评论(0编辑  收藏  举报