判断矩阵是否可以通过Go(Golang)中的旋转获得的教程

201 阅读1分钟

概述

给出两个n*n的矩阵,分别是矩阵和目标矩阵。 我们必须确定矩阵是否可以通过任意次数的90度旋转转换为目标矩阵。

例子1

Input: source = [2,1],[1,2]], target = [[1,2],[2,1]]
Output: true

源矩阵可以旋转90度一次,得到目标矩阵

例2

Input:  source = [[1,2],[2,2]], target = [[2,1],[1,2]]
Output: false

即使我们将源矩阵旋转3次90度,获得目标矩阵也是不可能的。

程序

下面是同样的程序

package main

import "fmt"

func findRotation(mat [][]int, target [][]int) bool {
	n, tmp := len(mat), make([]bool, 4)
	for i := range tmp {
		tmp[i] = true
	}
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			if mat[i][j] != target[i][j] {
				tmp[0] = false
			}
			if mat[i][j] != target[j][n-i-1] {
				tmp[1] = false
			}
			if mat[i][j] != target[n-i-1][n-j-1] {
				tmp[2] = false
			}
			if mat[i][j] != target[n-j-1][i] {
				tmp[3] = false
			}
		}
	}
	return tmp[0] || tmp[1] || tmp[2] || tmp[3]
}

func main() {
	output := findRotation([][]int{{2, 1}, {1, 2}}, [][]int{{1, 2}, {2, 1}})
	fmt.Println(output)

	output = findRotation([][]int{{1, 2}, {2, 2}}, [][]int{{2, 1}, {1, 2}})
	fmt.Println(output)

}

输出

true
false