【蓝桥杯】Z形打印二维数组
题目描述:

示例:
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 |
输出:
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16
分析:
看作是在走斜线,从做向右走(上坡)和从右向左走(下坡)。
边界处理:
如果是从左向右走l2r=true,走上坡,先打印该位置的元素,在判断下一步怎末走:
1.该位置r(row)=0,且c(col)没有到达边界,只能向右走(比如说:1->2);
2.该位置c到达边界,且r没有到达边界,只能向下走(比如说:8->12);
3.其余情况都是顺畅的向右上↗走,r--;c++;
否则,l2r=false,走下坡,先打印该位置元素,在判断下一步怎末走:
1.该位置c=0,且r没有到达边界,只能向下走(比如说:5->9);
2.该位置r到边界,只能向右走(比如说:10->11);
3.其余情况顺畅的想左下↙走,c--;r++;
代码如下:
1 public class case3 { 2 3 public static void main(String[] args) { 4 5 int arr[][] = { 6 { 1, 2, 3, 4 }, 7 { 5, 6, 7, 8 }, 8 { 9, 10, 11, 12 }, 9 { 13, 14, 15, 16 } 10 }; 11 printZ(arr); 12 13 } 14 static void printZ(int[][] matrix) { 15 int r = 0, m = matrix.length; 16 int c = 0, n = matrix[0].length; 17 boolean l2r = true;// 为真从左到右; 18 19 while (r < m && c < n) { 20 if (l2r) {// 从左向右 21 System.out.print(matrix[r][c] + " "); 22 if (r == 0 && c < n - 1) {// 只能向右走; 23 l2r = !l2r; 24 c++; 25 continue; 26 } else if (c == n - 1 && r > 0) {// 只能向下走; 27 l2r = !l2r; 28 r++; 29 continue; 30 } else { 31 r--; 32 c++; 33 } 34 35 } else {// 从右向左走 36 System.out.print(matrix[r][c] + " "); 37 if (c == 0 && r < m - 1) {// 只能向下走; 38 l2r = !l2r; 39 r++; 40 continue; 41 } else if (r == m - 1) {// && c < n - 1 42 l2r = !l2r; 43 c++; 44 continue; 45 } else { 46 c--; 47 r++; 48 } 49 } 50 51 } 52 53 } 54 }
持续更新中……
浙公网安备 33010602011771号