對於矩陣的遍歷的斜方向上的遍歷,在動態規划中使用非常普遍,現將矩陣斜方向上的遍歷方式總結如下:
主要思想:使用雙重循環 內部的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 }