package top100liked import ( "fmt" "testing" ) // https://leetcode.cn/problems/search-a-2d-matrix/?envType=study-plan-v2&envId=top-100-liked // 难在边界条件 func searchMatrix(matrix [][]int, target int) bool { // 第一列竖着找 m := len(matrix) n := len(matrix[0]) for i := range m { cur := matrix[i][0] switch { case cur == target: return true case cur > target: // target 可能在 i-1 行 if i-1 >= 0 { for j := range n - 1 { if matrix[i-1][j+1] < target { continue } else if matrix[i-1][j+1] == target { return true } else if matrix[i-1][j+1] > target { return false } } } case cur < target: // 如果 i == m-1 (最后一行) if i == m-1 { for j := range n - 1 { if matrix[i][j+1] < target { continue } else if matrix[i][j+1] == target { return true } else if matrix[i][j+1] > target { return false } } } continue } } return false } func Test(t *testing.T) { matrix := [][]int{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}} target := 3 fmt.Println(searchMatrix(matrix, target)) target = 13 fmt.Println(searchMatrix(matrix, target)) }