Z字形变换

76 阅读1分钟

思路一:

用二维切片,列出变换后的结果,然后重组成新的字符串

找到规律,numRows+numRows-2 个元素的生成

也就是找到当前是垂直向下,还是斜着向上的,添加到不同的切片中,也可以用 flag 标记

func convert(s string, numRows int) string {
	var slice [][]rune = make([][]rune, numRows)
	//err:这里应该判断s不为空!否则
	//for i := 1; i <= numRows*2-2; i++ {
	for i := 1; len(s)>0; i++ {
		if i>numRows*2-2{
			//下标重置为1
			i=1
		}

		var index int
		if i <= numRows {
			//z的垂直部分
			index = i - 1
		} else {
			//z的拐弯部分
			index = numRows - (i - numRows) - 1
		}
		slice[index] = append(slice[index], rune(s[0]))
		s = s[1:]
	}
	//然后组装成结果
	result := ""
	for _, item := range slice {
		result += string(item)
	}
	return result
}