关于矩阵斜方向遍历的问题
对于矩阵的遍历的斜方向上的遍历,在动态规划中使用非常普遍,现将矩阵斜方向上的遍历方式总结如下:
主要思想:使用双重循环 内部的for循环1-n,代表对斜方向中心线的n个数字进行遍历,外部for循环表示步长,也就是在中心线的基础上进行当前的步长的 加和减,如图:
1 int[][] vec = new int[][]{{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}}; 2 3 //左下-右上方向 从中间开始 向右下方遍历 4 //i 代表的是步长 j代表是中间的斜轴 5 for(int i = 0;i < vec.length;i++){ 6 for(int j = 0;j < vec.length;j++){ 7 if(j+i >= vec.length) break; 8 System.out.print(vec[j][j+i] + " "); 9 } 10 System.out.println(); 11 } 12 13 //左下-右上方向 从右上方开始 向中间遍历 14 //i 代表的是步长 j代表是中间的斜轴 15 for(int i = vec.length - 1;i >=0 ;i--){ 16 for(int j = 0;j < vec.length ;j++){ 17 if(j+i >= vec.length) break; 18 System.out.print(vec[j][j+i] + " "); 19 } 20 System.out.println(); 21 } 22 23 //左下-右上方向 从中间开始 向左下方遍历 24 //i 代表的是步长 j代表是中间的斜轴 25 for(int i = 0;i < vec.length ;i++){ 26 for(int j = 0;j < vec.length ;j++){ 27 if(j-i < 0) continue; 28 System.out.print(vec[j][j-i] + " "); 29 } 30 System.out.println(); 31 } 32 33 //左下-右上方向 从左下方开始 向中间白能力 34 //i 代表的是步长 j代表是中间的斜轴 35 for(int i = vec.length - 1;i >= 0 ;i--){ 36 for(int j = 0;j < vec.length ;j++){ 37 if(j-i < 0) continue; 38 System.out.print(vec[j][j-i] + " "); 39 } 40 System.out.println(); 41 }