[Swift]LeetCode766. 託普利茨矩陣 | Toeplitz Matrix

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-esvvfrut-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element.git

Now given an M x N matrix, return True if and only if the matrix is Toeplitzgithub

Example 1:數組

Input:
matrix = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]
Output: True
Explanation:
In the above grid, the diagonals are:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]".
In each diagonal all elements are the same, so the answer is True.

Example 2:微信

Input:
matrix = [
  [1,2],
  [2,2]
]
Output: False
Explanation:
The diagonal "[1, 2]" has different elements.

Note:spa

    1. matrix will be a 2D array of integers.
    2. matrix will have a number of rows and columns in range [1, 20].
    3. matrix[i][j] will be integers in range [0, 99].

若是一個矩陣的每一方向由左上到右下的對角線上具備相同元素,那麼這個矩陣是託普利茨矩陣code

給定一個 M x N 的矩陣,當且僅當它是託普利茨矩陣時返回 Truehtm

示例 1:blog

輸入: 
matrix = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]
輸出: True
解釋:
在上述矩陣中, 其對角線爲:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。
各條對角線上的全部元素均相同, 所以答案是True。

示例 2:內存

輸入:
matrix = [
  [1,2],
  [2,2]
]
輸出: False
解釋: 
對角線"[1, 2]"上的元素不一樣。

說明:

  1.  matrix 是一個包含整數的二維數組。
  2. matrix 的行數和列數均在 [1, 20]範圍內。
  3. matrix[i][j] 包含的整數在 [0, 99]範圍內。

進階:

  1. 若是矩陣存儲在磁盤上,而且磁盤內存是有限的,所以一次最多隻能將一行矩陣加載到內存中,該怎麼辦?
  2. 若是矩陣太大以致於只能一次將部分行加載到內存中,該怎麼辦?

Runtime: 28 ms
Memory Usage: 19 MB
 1 class Solution {
 2     func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
 3         for i in 0..<matrix.count - 1
 4         {
 5             for j in 0..<matrix[i].count - 1
 6             {
 7                 if matrix[i][j] != matrix[i + 1][j + 1]
 8                 {
 9                     return false
10                 }
11             }
12         }
13         return true
14     }
15 }

28ms

 1 class Solution {
 2     func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
 3         var temp: [Int] = matrix[0]
 4         for i in 1..<matrix.count {
 5             let smallMatrix = matrix[i]
 6             for j in 0..<smallMatrix.count {
 7                 if j == 0 {
 8                     temp.insert(smallMatrix[j], at: 0)
 9                 } else {
10                     if smallMatrix[j] != temp[j] {
11                         return false
12                     }
13                 }
14             }
15         }
16         return true
17     }
18 }

32ms

 1 class Solution {
 2     func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
 3         var result = true
 4 
 5         for i in 0..<matrix.count {
 6             for j in 0..<matrix[0].count {
 7                 if i > 0 && j > 0 {
 8                     break;
 9                 }
10                 var pointR = i + 1
11                 var pointC = j + 1
12 
13                 let val1 = matrix[i][j];
14                 let count = matrix[0].count
15 
16                 while pointR < matrix.count {
17                     if pointC < count {
18                         let val2 = matrix[pointR][pointC]
19                         if val1 != val2 {
20                             result = false;
21                         }
22                         pointR += 1;
23                         pointC += 1;
24                     } else {
25                         break;
26                     }
27                 }
28             }
29         }
30         return result;
31     }
32 }

68ms

 1 class Solution {
 2     func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
 3 for i in 0..<matrix[0].count{
 4             var val = -1
 5             var rowIndex = 0
 6             var columnIndex = i
 7             
 8             while rowIndex < matrix.count && columnIndex < matrix[0].count{
 9                 if val != -1 && val != matrix[rowIndex][columnIndex]{
10                     return false
11                 }
12                 val = matrix[rowIndex][columnIndex]
13                 rowIndex += 1
14                 columnIndex += 1
15             }
16         }
17        
18         for i in 0..<matrix.count{
19             var val = -1
20             
21             var rowIndex = i
22             var columnIndex = 0
23             
24             while rowIndex < matrix.count && columnIndex < matrix[0].count{
25                 if val != -1 && val != matrix[rowIndex][columnIndex]{
26                     return false
27                 }
28                 val = matrix[rowIndex][columnIndex]
29                 rowIndex += 1
30                 columnIndex += 1
31             }            
32         }
33         return true
34     }
35 }

88ms

 1 class Solution {
 2     func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
 3         guard matrix.count > 0 else {
 4             return false
 5         }
 6         if matrix.count == 1 {
 7             return true
 8         }
 9         
10         var row = matrix[0]
11         for i in 1..<matrix.count {
12             row = matrix[i-1]
13             if !matrix[i][1...].elementsEqual(row[0..<row.count - 1]) {
14                 return false
15             }
16         }
17         return true
18     }
19 }
相關文章
相關標籤/搜索