這兩道題目的目的就是訓練我們應該由巨集觀排程的概念,切不可注重於區域性的變化。
相同點:
a) 這些題沒告訴你怎麼做好,告訴你不能怎麼做。不能想下標怎麼變化!!!。
b) 先要確定好巨集觀排程,然後其他的都是簡單函式
題目
給定乙個整型矩陣matrix,請按照轉圈的方式列印它。例如:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
列印結果為:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10
要求:額外空間複雜度為o(1)
思路
這個題我們的實現思路是確定矩陣的左上角以及右下角,然後我們列印由這兩個點確定的邊界,完成後,讓左上角的點向右下角移動,讓右下角的點向左上角移動,直到左上角的行大於右下角點的行,或者左上角的點的列大於右下角的點的列結束迴圈。
#include
using
namespace std;
void
printedge
(int
(*matrix)[4
],int row1,
int col1,
int row2,
int col2)
}else
if(col1 == col2)
}else
// 不止一行,不止一列。
while
(curr != row2)
while
(curc != col1)
while
(curr != row1)}}
void
spiralorderprint
(int matrix[
4],int rows,
int cols)
}int
main
(int argc,
char
** ar**),,
,};spiralorderprint
(matrix,4,
4);system
("pause");
return exit_success;
}
題目
「之」字形列印矩陣:給定乙個矩陣matrix,按照「之」字形的方式列印這個矩陣,例如:
1 2 3 4
5 6 7 8
9 10 11 12
「之」字形列印的結果為:1,2,5,9,6,3,4,7,10,11,8,12
要求:額外空間複雜度為o(1)
思路
1) 選擇乙個點表示(row1, col1)以及另乙個點(row2, col2),讓其最初都是0,即都指向左上角的元素。
2) 列印這兩個點確定的對角線,直到row1等於矩陣的行數-1,其中(row1,col1)的移動規律是先向左移動,移動到頭之後就向下移動,(row2, col2)的移動規律是先向下移動,移動到頭之後就向左移動。
#include
#include
using
namespace std;
void
printlevel
(const vectorint>>
&matrix,
int row1,
int col1,
int row2,
int col2,
bool direction)
}else
} cout << matrix[row1]
[col1]
<<
", ";}
void
printmatrixzigzag
(const vectorint>>
&matrix,
int rows,
int cols)
printlevel
(matrix, row1, col1, row2, col2, direction)
; cout << endl;
}int
main
(int argc,
char
** ar**),,
};printmatrixzigzag
(matrix,3,
4);system
("pause");
return exit_success;
}
轉圈列印矩陣
題目 給定乙個整型矩陣matrix,請按照轉圈的方式列印它。例如 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 列印結果為 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 要求 額外空間複雜度為o 1 難度 1星 coding utf 8...
轉圈列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序一次列印出每乙個數字。例如 輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出結果 1,2 3 4 8 12 16 15 14 13 9 5 6 7 11 10這個題的解法很簡單,就是矩陣分圈處理,每次都要列印最外...
轉圈列印矩陣
題目 給定乙個整形矩陣matrix,請按照轉圈的方式列印它。例如 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 列印結果為 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 要求 額外空間複雜度為o 1 分析 如果把思路限制在區域性座標怎麼...