今天刷了leetcode第6题,Z字形变换,后来终于解决了。这里附上源码:

LinkedList[] list = new LinkedList[numRows];
		for (int i = 0; i < numRows; i++) {
			list[i] = new LinkedList<Character>();
		}
		int length = 0;
		while (length < s.length()) {
			for (int i = 0; i < numRows && length < s.length(); i++) {
				list[i].add(s.charAt(length++));
			}

			for (int i = numRows - 2; i > 0 && length < s.length(); i--) {
				list[i].add(s.charAt(length++));
			}

		}
		for (int i = 1; i < numRows; i++) {
			int size = list[i].size();
			for (int j = 0; j < size; j++) {
				list[0].add(list[i].remove());
			}
		}
		String str = list[0].toString();
		return str.substring(1, str.length() - 1).replaceAll(", ", "");

下面是我解题的思路:
按Z字形排列的话,就像是给你一个二维的数组,我们按列排,排完这一列,再排另外一列,并且每一列排的数据个数并不是固定的,如果真的用二维数组来存放它排列后的数据,就很麻烦,如果我们观察每一行的话,它就是相当于一个数组,也就是说我们不用考虑数据在每一列具体是什么位置,只要它在每一行的顺序没有错误就可以了。并转换以后,读取数据是从每一行的头开始读的,实际上就是先进先出,所以,每一行我们就可以用一个队列来表示,java里面用LinkedList实现了Queue的接口,所以用它来存放每一行要存储的数据,Z字形转换的规律就是:先从0一直到numRows-1;然后再从numRows-1到0;就这样一直循环。所以在while循环里面,不停的进行判断示意图如下:

Leetcode第6题ZigZag,Z 字形变换

相关文章:

  • 2021-05-11
  • 2021-10-02
  • 2021-05-11
  • 2021-10-14
  • 2022-12-23
  • 2021-10-04
  • 2022-12-23
  • 2021-04-21
猜你喜欢
  • 2021-05-18
  • 2021-06-18
  • 2021-10-18
  • 2021-12-11
  • 2021-08-06
  • 2021-08-03
  • 2021-12-22
相关资源
相似解决方案