(搜索) 劍指 Offer 13. 機器人的運動范圍 ——【Leetcode每日一題】

?劍指 Offer 13. 機器人的運動范圍

難度:中等

地上有一個 mn 列的方格,從坐標 [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:

輸入:m = 2, n = 3, k = 1
輸出:3

示例 2:

輸入:m = 3, n = 1, k = 0
輸出:1

提示

  • 1 <= n,m <= 100
  • 0 <= k <= 20

💡思路:廣度優先搜索

我們將行坐標和列坐標數位之和大于 k 的格子看作障礙物,那么這道題就是一道很傳統的搜索題目,我們可以使用廣度優先搜索或者深度優先搜索來解決它,本文選擇使用 廣度優先搜索 的方法來講解。

那么如何計算一個數的數位之和呢?

  • 我們只需要對數 x 每次對 10 取余,就能知道數 x 的個位數是多少,然后再將 x 除 10,這個操作等價于將 x 的十進制數向右移一位,刪除個位數(類似于二進制中的 >> 右移運算符),不斷重復直到 x 為 0 時結束。

🍁代碼:(C++、Java)

C++

class Solution {
private:int getsum(int x){int ans = 0;while(x > 0 ){ans += x % 10;x /= 10;}return ans;}
public:int movingCount(int m, int n, int k) {if(k == 0) return 1;vector<pair<int, int>> dirs{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};queue<pair<int, int>> q;q.push(make_pair(0, 0));vector<vector<int>> visited(m, vector<int>(n));visited[0][0] = 1;int ans = 1;while(!q.empty()){auto [x, y] = q.front();q.pop();for(auto dir : dirs){int cur_x = x + dir.first, cur_y = y + dir.second;if(cur_x < 0 || cur_x >= m || cur_y < 0 || cur_y >= n || visited[cur_x][cur_y] || getsum(cur_x) + getsum(cur_y) > k) continue;q.push(make_pair(cur_x, cur_y));visited[cur_x][cur_y] = 1;ans++;}}return ans;}
};

Java

class Solution {private int getsum(int x){int ans = 0;while(x > 0 ){ans += x % 10;x /= 10;}return ans;}public int movingCount(int m, int n, int k) {if(k == 0) return 1;int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};Queue<int[]> q = new LinkedList<int[]>();q.offer(new int[]{0, 0});int[][]  visited = new int[m][n];visited[0][0] = 1;int ans = 1;while(!q.isEmpty()){int[] cell = q.poll();for(int[] dir : dirs){int cur_x = cell[0] + dir[0], cur_y = cell[1] + dir[1];if(cur_x < 0 || cur_x >= m || cur_y < 0 || cur_y >= n || visited[cur_x][cur_y] == 1 || getsum(cur_x) + getsum(cur_y) > k) continue;q.offer(new int[]{cur_x, cur_y});visited[cur_x][cur_y] = 1;ans++;}}return ans;}
}

🚀 運行結果:

在這里插入圖片描述

🕔 復雜度分析:

  • 時間復雜度 O ( m n ) O(mn) O(mn),其中 m 為方格的行數,n 為方格的列數。考慮所有格子都能進入,那么搜索的時候一個格子最多會被訪問的次數為常數,所以時間復雜度為 O ( 4 m n ) = O ( m n ) O(4mn) = O(mn) O(4mn)=O(mn)
  • 空間復雜度 O ( m n ) O(mn) O(mn),搜索的時候需要一個大小為 O ( m n ) O(mn) O(mn), 的標記結構用來標記每個格子是否被走過。

題目來源:力扣。

放棄一件事很容易,每天能堅持一件事一定很酷,一起每日一題吧!
關注我LeetCode主頁 / CSDN—力扣專欄,每日更新!

注: 如有不足,歡迎指正!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42070.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42070.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell腳本基礎

目錄 前言 一、概述 &#xff08;一&#xff09;、shell腳本基礎概念 &#xff08;二&#xff09;、shell的類型 二、Shell變量 &#xff08;一&#xff09;、組成 1.變量名 2.變量值 &#xff08;二&#xff09;、類型 1.系統內置變量&#xff08;環境變量&#xff09; 2.自定…

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI轉DP EDP方案設計

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI轉DP EDP方案設計 LT8911EXB是MIPI DSI/CSI 轉eDP轉換芯片&#xff0c;ASL CS5523不需要改電路就可以直接PIN TO PIN替代與兼容LT8911EXB。 ASL CS5523與 LT8911EXB的功能與參數&#xff0c;用途方式以及封裝方式和…

【題解】旋轉數組的最小數字、比較版本號

文章目錄 旋轉數組的最小數字比較版本號 旋轉數組的最小數字 題目鏈接&#xff1a;旋轉數組的最小數字 解題思路1&#xff1a;遍歷求最小值 代碼如下&#xff1a; int minNumberInRotateArray(vector<int> rotateArray) {int min rotateArray[0];for(auto const&…

迪米特法則

迪米特法則&#xff0c;也稱為最少知識原則&#xff08;Law of Demeter&#xff09;&#xff0c;是面向對象設計中的一個原則&#xff0c;旨在降低對象之間的耦合性&#xff0c;提高系統的可維護性和可擴展性。該原則強調一個類不應該直接與其它不相關的類相互交互&#xff0c;…

Android 控件截圖保存本地并分享

目錄 需求 需求分析 一、截圖控件生成圖片 二、將圖片保存至本地 2.1 權限 2.2 保存圖片 2.3 調用 三、分享 四、通過測試機型 需求 截圖當前頁面某個控件的內容&#xff0c;并且保存在本地&#xff0c;可分享。 需求分析 1.截圖控件生成圖片 2.保存至本地(需考慮版…

【SpringCloud】Ribbon定制化配置

文章目錄 使用Ribbon自帶負載均衡算法添加負載均衡算法ConfigurationRestTemplate使用上面負載均衡算法 自定義負載均衡算法負載均衡算法實現RestTemplate在Controller中使用該負載均衡算法ServiceIInstance解釋 使用Ribbon自帶負載均衡算法 添加負載均衡算法Configuration /…

實現矩陣地圖與rviz地圖重合

文章目錄 一、rviz地圖轉換矩形地圖(只能用于全局規劃)二、在rviz上顯示地圖邊界信息,可視化調整,實現重合(只能用于局部規劃)一、rviz地圖轉換矩形地圖(只能用于全局規劃) 此方法矩形地圖可能會與rviz地圖不重合,通過改變偏移量x_offset,y_offset接近地圖 可以將矩…

FL Studio for Windows-21.1.0.3713中文直裝版功能介紹及系統配置要求

FL Studio 21簡稱FL水果軟件,全稱是&#xff1a;Fruity Loops Studio編曲&#xff0c;由于其Logo長的比較像一款水果因此&#xff0c;在大家更多的是喜歡稱他為水果蘿卜&#xff0c;FL studio21是目前最新的版本&#xff0c;這是一款可以讓你的計算機就像是一個全功能的錄音室&…

Docker Dockerfile Docker-compose學習筆記

文章目錄 Centos環境下安裝Docker配置鏡像源 Windows環境下安裝Docker配置鏡像源 使用Dokcer鏡像1.獲取鏡像2.查看鏡像信息(1)列出鏡像(2)鏡像標簽(3)鏡像詳細信息(4)鏡像歷史 3.搜索鏡像4.刪除和清理鏡像(1)使用標簽刪除鏡像(2)使用ID刪除鏡像(3)清理鏡像 5.創建鏡像(1)基于已…

基于SpringBoot和Freemarker的頁面靜態化

頁面靜態化能夠緩輕數據庫的壓力&#xff0c;還能提高頁面的并發能力&#xff0c;但是網頁靜態化是比較適合大規模且相對變化不太頻繁的數據。 頁面靜態化在實際應用中還是比較常見的&#xff0c;比如博客詳情頁、新聞網站或者文章類網站等等。這類數據變化不頻繁比較適合靜態…

56.linux 進程管理命令和用戶管理命令

目錄 一、進程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后臺運行程序 6.jobs 7.fg bg 8.top 二、用戶管理命令 1.系統存儲用戶信息的文件 2.添加新用戶 3.修改用戶密碼 4.刪除用戶 一、進程管理命令 1.ps 用于查看當前系統中運行的進程信息。它可以…

Golang 程序性能優化利器 PGO 詳解(一):簡單介紹及使用

在軟件開發過程中&#xff0c;性能優化是不可或缺的一部分。無論是在Web服務、數據處理系統還是實時通信中&#xff0c;良好的性能都是至關重要的。Golang 從1.20版版本開始引入的 Profile Guided Optimization&#xff08;PGO&#xff09;機制能夠幫助更好地優化 Go 程序的性能…

The Age of Data and AI: Challenges and Opportunities

Simply put Abstract: This paper examines the impact of the “Age of Data” on the field of artificial intelligence (AI). With the proliferation of digital technologies and advancements in data collection, storage, and processing, organizations now have ac…

進行 200 瓦太陽能 (PV) 模塊設計以測量太陽能光伏陣列的電壓、電流和功率、綜合負荷頻率和電壓控制系統的方法研究(Simulink實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

Levenshtein python調用

函數解釋&#xff1a; Levenshtein距離又稱作編輯距離&#xff08;Edit Distance&#xff09;&#xff0c;是指兩個字符之間&#xff0c;由一個字符轉變成另一個字符所需的最少編輯操作次數。被允許的操作有以下幾種&#xff1a; a. Replace替換&#xff0c;將一個字符替換成另…

如何使用CSS實現一個響應式視頻播放器?

聚沙成塔每天進步一點點 ? 專欄簡介? 使用CSS實現響應式視頻播放器? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那些對Web開發感興趣…

vue輸入框只能輸入數字類型,禁止輸入和粘貼e

js怎么去除1e里面e 方法一&#xff1a;使用 Number() 函數將科學計數法表示的字符串轉換為數字。然后&#xff0c;使用 toString() 方法將其轉換回字符串形式&#xff0c;這樣就會自動移除科學計數法中的 "e" var num 1e10; // 科學計數法表示的數字 var numStr …

【小夢C嘎嘎——啟航篇】string介紹以及日常使用的接口演示

【小夢C嘎嘎——啟航篇】string 使用&#x1f60e; 前言&#x1f64c;C語言中的字符串標準庫中的string類string 比較常使用的接口對上述函數和其他函數的測試代碼演示&#xff1a; 總結撒花&#x1f49e; &#x1f60e;博客昵稱&#xff1a;博客小夢 &#x1f60a;最喜歡的座右…

c語言每日一練(9)

前言&#xff1a;每日一練系列&#xff0c;每一期都包含5道選擇題&#xff0c;2道編程題&#xff0c;博主會盡可能詳細地進行講解&#xff0c;令初學者也能聽的清晰。每日一練系列會持續更新&#xff0c;暑假時三天之內必有一更&#xff0c;到了開學之后&#xff0c;將看學業情…

rollup工具打包報錯問題匯總

1. (!) this has been rewritten to undefined 原因&#xff1a;這是因為打包后沒有給this指向window&#xff0c;導致this undefined&#xff0c;因此需要配置context參數來指定代碼執行環境的參數為window 解決&#xff1a;rollup.config.js文件中添加配置 module.exports…