leetcode樸實無演算法之車的可用量

2021-10-04 10:27:50 字數 1319 閱讀 4489

在乙個 8 x 8 的棋盤上,有乙個白色車(rook)。也可能有空方塊,白色的象(bishop)和黑色的卒(pawn)。它們分別以字元 「r」,「.」,「b」 和 「p」 給出。大寫字元表示白棋,小寫字元表示黑棋。

車按西洋棋中的規則移動:它選擇四個基本方向中的乙個(北,東,西和南),然後朝那個方向移動,直到它選擇停止、到達棋盤的邊緣或移動到同一方格來捕獲該方格上顏色相反的卒。另外,車不能與其他友方(白色)象進入同乙個方格。

返回車能夠在一次移動中捕獲到的卒的數量。

board.length == board[i].length == 8

board[i]

[j] 可以是 'r','.','b' 或 'p'

只有乙個格仔上存在 board[i]

[j]==

'r'

在leetcode中題目還配有和示例方便理解。本題描述的過程不需要用到任何有名字的演算法,所以我們需要自己分析實現即可。

首先我們需要在棋盤中找到車「r」

其次,車需要在東西南北四個方向進行移動

判斷停止的邊界條件有三個,到達棋盤邊緣;遇到白色的象;捕獲相反顏色的卒

我們演算法需要獲得的是捕獲到相反顏色的卒的個數

因此遇到停止邊界條件的前兩個的時候,只執行停止即可

遇到最後乙個停止的邊界條件時,計數加1,執行停止

go版本**

func

numrookcaptures

(board [

]byte

)int

var dy =[4

]int

//獲取車的位置

for i:=

0;i<

8;i++}}

//按照東西南北四個方向前進

for i :=

0;i<

4;i++

//捕獲到卒,計數+1,並停止

if board[tx]

[ty]

=='p'}}

return cnt

}

時間複雜度為o(n^2),其中n為棋盤的邊長,

第一步找到白色車在棋盤中的位置需要o(n^2)的時間複雜度

第二步模擬車在四個方向上捕獲顏色相反的卒需要o(n)的時間複雜度

整理後也就是o(n^2)

空間複雜度:o(1)。

不需要演算法的題目,我們就使用基礎的資料結構,再加上資料結構的基礎操作即可完成,不必追求演算法的形式,要明白演算法是為了解決問題而存在的。

車聯網演算法之概述(一)

2016年,很感謝同學的引領,進入同學公司工作,從此進入了車聯網行業,剛入公司,演算法正好缺人,讓我試試,我從乙個行業門外漢,花了3,5個月時間居然把演算法實現了,而且效果非常好,有趣的是,我居然還做成了大家眼中的演算法 大牛 從此一發不可收拾,2 3年做了7,8個發明專利,全是演算法相關的 駕駛行...

LeetCode之遞迴演算法

何為遞迴?程式反覆呼叫自身即是遞迴。我自己在剛開始解決遞迴問題的時候,總是去糾結這一層函式做了什麼,它呼叫自身後的下一層函式又做了什麼。然後就會覺得實現乙個遞迴解法十分複雜,根本就無法下手。這是乙個思維誤區,一定要走出來,既然遞迴是乙個反覆呼叫自身的過程,這就是說它的每一及的功能都是一樣的,因此我們...

Leetcode之數學計算法專題

1.pow x,n 2.sqrt x 3.divide two integers 4.multiply strings 5.add two numbers 三道數學題,分別用了分治法,二分查詢法和不標準的二分查詢法。第一題巧妙地運用了n除二的最終形態使n小於零的公式 half half x變成了1 ...