iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0

Day17 Leetcode Array系列---- Toeplitz Matrix

tags: 2020IT30

本次題目 Toeplitz Matrix by JS

判斷題目給出的陣列是不是符合左上至右下之對角線上的數字是一樣的

matrix1 = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]
output1= true
matrix2 = [
  [1,2],
  [2,2]
]
output2 = false

思考路線

  1. 可能需要雙迴圈來取到目標元素
  2. 判斷目標元素與其右下角的元素是否一樣
  3. 右下角的元素必須存在才能判斷

Coding Time

先建立雙迴圈

利用雙迴圈轉出的 i j 取到目標元素

用 i+1 與 j+1 找到目標元素右下角的元素

在這裡的 i 是 row 需要先判斷 ary[i+1] 存不存在

同時判斷 ary[i+1][j+1] 這個元素存不存在

如果兩者都符合就去比較 a[i][j] 是否與 ary[i+1][j+1] 一樣

matrix1 = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]
output1= true
matrix2 = [
  [1,2],
  [2,2]
]
output2 = false
function diagonal(ary){
  for(let i=0; i< ary.length; i++){
    for(let j=0; j < ary[0].length; j++){
      if(ary[i+1] && ary[i+1][j+1]){
        if(ary[i][j] !== ary[i+1][j+1]){
          return false
        }
      }
    }
  }
  return true
}

function expect(a,b){
  console.log(a==b)
}

expect(diagonal(matrix1),output1)
expect(diagonal(matrix2),output2)

測試過程一直出各種錯誤,經常會噴出這個位置是 undefined 之類的錯誤訊息,這是因為我是從元素的右下角進行比對,(x,y)==(x+1,y+1) 這樣的座標概念去比較,所以在迴圈跑到子陣列的最後一個元素時,他的右下角沒有元素所以會一直噴錯,需要做個 if 去判斷右下角有無東西

if(ary[i+1] && ary[i+1][j+1])

今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀

Daily kitty


上一篇
Day 16 --Climbing Stairs
下一篇
Day 18 -- Transpose Matrix
系列文
菜雞的30天工程師轉職日記--Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言