個人部落格:the blog of waiterxiaoyy 歡迎來互相交流學習。機械人運動這類問題在做題的過程中遇到過好幾次,
大概型別就是給定乙個初始位置,可以往多個方向走(一般是2個,即右下),
有時候是4個方向(上下左右),
然後求到右下角的最小路徑,這類問題一般是採用動態規劃來做,
有時候可能會出現阻礙物,
但機械人這道題就簡化了很多,直接看題吧。
地上有乙個m
行n
列的方格,從座標[0,0]
到座標[m-1,n-1]
。乙個機械人從座標[0, 0]
的格仔開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行座標和列座標的數字之和大於k的格仔。
例如,當k為18時,機械人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機械人能夠到達多少個格仔?
示例 1:
示例 2:輸入:m = 2, n = 3, k = 1
輸出:3
輸入:m = 3, n = 1, k = 0
輸出:1
解題思路
題目和我們一開始分析的那樣,
機械人的位置在m行n列方格的左上角開始,
但目標不是右下角了,而是移動當座標的數字之和大於k後就不能繼續移動了,
這道題有個隱藏的條件,
題目說可以上下左右移動,我覺得有一定的誤導,這道題只要兩個方向就可以了,
因為機械人的初始位置在左上角,只要向右或者向下兩個方向就行了,
對於每個點,只要滿足三個條件,就可以繼續進行兩個方向的選擇,
對於該點是否被訪問,我們可以用乙個boolean型的陣列記錄該點的訪問狀態,被訪問後就變為true,
對於該點的數字之和,我們可以寫乙個函式專門計算數字的和,
對該點是否在邊界,如果在右邊界,就只能向下運動,如果在下邊界,就只能向右運動,其他邊界無需考慮,//傳入座標資訊
public
intsums
(int x,
int y)
//一直取y的個位數加到結果裡面,直到y為0
while
(y !=0)
return ans;
}
本題可以使用深度優先搜尋和廣度優先搜尋來做,
深度優先搜尋就是對每乙個方向都遞迴前進,
廣度優先搜尋要採用佇列來記錄合格的點資訊,還需要對方格進行抽象座標化,
具體我們看**。
**
class
solution
//深度優先搜尋
public
intdfs
(int i,
int j,
int sum,
boolean
visited)
//進行計算座標的數字之和
public
intsums
(int x,
int y)
//一直取y的個位數加到結果裡面,直到y為0
while
(y !=0)
return ans;
}}
class
solution
if(curpoint.y +
1< n &&
sums
(curpoint.x, curpoint.y +1)
<= k &&
!visited[curpoint.x]
[curpoint.y +1]
)}return count;
}//進行計算座標的數字之和
public
intsums
(int x,
int y)
//一直取y的個位數加到結果裡面,直到y為0
while
(y !=0)
return ans;}}
//抽象座標類
class
point
}
整理於2020.4.9
ROS機械人安裝學習筆記
最近做的乙個專案需要在ubuntu16.04下做ros機械人作業系統開發,因為之前從沒接觸過linux和ros機械人,記錄下學習過程,以備後用。假設ubuntu16.04已經安裝好了,我們的目標是安裝ros kinetic,因為這個版本支援ubuntu16.04。1.新增軟體庫到sources.li...
學習筆記 網路機械人3 0最簡單的網路機械人
利用request輸出首頁內容 import requests 匯入網路請求模組 headers 定製請求頭 html requests.get headers headers 找到 get請求 print html.text 獲取內容遍歷10頁內容 import requests 匯入網路請求模組...
機械人筆記psv中文 機械人筆記精英版
機械人筆記精英版遊戲簡介 由於phonedroid 一種具有增強現實 a.r.功能的裝置 的日益普及,先進技術的時代終於來到了種子島。在那個島上,種子島高中的機械人研究俱樂部即將解散。機械人筆記精英版遊戲故事 儘管處境艱難,機械人俱樂部僅有的兩名成員之一的kaito yashio卻毫不在意,寧願整天...