日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

剑指offer:面试题13. 机器人的运动范围

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer:面试题13. 机器人的运动范围 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:機器人的運動范圍

地上有一個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:

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

示例 2:

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

提示:

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

解題:

  • 本題使用的方法同樣還是回溯法,另外還需要會計算給定整數上的各個位上數之和。
  • 使用一個訪問數組記錄是否已經經過該格子。
  • 機器人從(0,0)開始移動,當它準備進入(i,j)的格子時,通過檢查坐標的數位來判斷機器人是否能夠進入。
  • 如果機器人能進入(i,j)的格子,接著在判斷它是否能進入四個相鄰的格子(i,j-1),(i,j+1),(i-1,j),(i+1,j)。
  • 因此,可以用回溯法來解決這一問題。
public class Solution {//回溯法public int movingCount(int threshold, int rows, int cols) {if(rows<=0||cols<=0||threshold<0)   return 0;int[] visited=new int[rows*cols];return MovingCount(threshold,rows,cols,0,0,visited);}private int MovingCount(int threshold,int rows,int cols,int row,int col,int[] visited){int count=0;if(canWalkInto(threshold, rows, cols, row, col, visited)){visited[row*cols+col]=1;count=1+MovingCount(threshold,rows,cols,row-1,col,visited)   //往上+MovingCount(threshold,rows,cols,row+1,col,visited)  //往下+MovingCount(threshold, rows, cols, row, col-1, visited)   //往左+MovingCount(threshold, rows, cols, row, col+1, visited);  //往右}return count;}private boolean canWalkInto(int threshold,int rows,int cols,int row,int col,int[] visited){if(row>=0 && row<rows && col>=0 && col<cols&& getSumOfDigits(row)+getSumOfDigits(col)<=threshold&& visited[row*cols+col]==0)return true;elsereturn false;}private int getSumOfDigits(int number){int sum=0;while(number!=0){sum+=number%10;number/=10;}return sum;}
}

?

總結

以上是生活随笔為你收集整理的剑指offer:面试题13. 机器人的运动范围的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。