順時針九十度旋轉矩陣

題目:給定一個nn的矩陣,順時針把矩陣旋轉90度。
比如說{{1,2,3}{4,5,6}{7,8,9}}。順時針旋轉90度爲{{7,4,1}{8,5,2}{9,6,3}}。
解法一:時間複雜度爲o(n
n),空間複雜度爲o(n)。
步驟:(1)把矩陣的行當做一個整體,逆序矩陣中的行,也就是說把matrix[i]行和matrix[len - i]進行交換。(2)在交換後的矩陣中,按照對角線交換每個數,也就是說交換matrix[i][j]和matrix[j][i]。因爲需要交換每一行,所以需要o(n)的額外空間


void rotate(vector<vector<int>>& matrix) 
{
	if (matrix.empty())
		return;
	int start = 0;
	int last = matrix.size() - 1;
	//交換矩陣中的行
	while (start < last)
	{
		swap(matrix[start++], matrix[last--]);
	}
	//交換matrix[i][j]和matrix[j][i]
	for (int i = 0; i < matrix.size(); ++i)
	{
		for (int j = 0; j < i; ++j)
		{
			swap(matrix[i][j], matrix[j][i]);
		}
	}
}

解法二:時間複雜度爲o(n*n),空間複雜度爲o(1)。我們每次只交換一個元素,而且一次就把元素交換到旋轉以後的位置。交換一個元素需要o(1)的額外的空間。
思路:
從外到內依次旋轉


void rotate(vector<vector<int>>& matrix)
{
	if (matrix.empty())
		return;
	for (int layer = 0; layer < matrix.size() / 2; ++layer)
	{
		int first = layer;
		int last = matrix.size() - first - 1;
		for (int i = first; i < last; ++i)
		{
			int tmp = matrix[first][i];
			matrix[first][i] = matrix[last - i + layer][first];
			matrix[last - i + layer][first] = matrix[last][last - i + layer];
			matrix[last][last - i + layer] = matrix[i][last];
			matrix[i][last] = tmp;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章