<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          中等難度的高級測試開發(fā)崗算法題:機器人的運動范圍

          共 361字,需瀏覽 1分鐘

           ·

          2020-08-14 18:04

          題目信息:

          地上有一個m行n列的坐標方格,從坐標 [0,0] 到坐標 [m-1,n-1] 。一個機器人從坐標 [0, 0] 的格子開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行坐標和列坐標的數(shù)位之和大于k的格子。例如,當k為18時,機器人能夠進入坐標方格 [35, 37] ,因為3+5+3+7=18 <= k。但它不能進入方格 [35, 38],因為3+5+3+8=19 > k。請問該機器人能夠到達多少個格子?

          示例 1:

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

          輸出:3

          示例 2:?

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

          輸出:1

          提示:1 <= n,m <= 100; 0 <= k <= 20

          解題思路:

          這是一道中等難度的算法題,可能出現(xiàn)在高級測試開發(fā)等面試場景中。這題是對空間搜索和動態(tài)規(guī)劃等算法點的考察,了解這個出題點后,我們就可以針對性的編碼實現(xiàn)了。

          1、我們根據(jù)坐標的行列(m, n)值,畫出一張mxn的矩陣,也就是一個[m][n]的二維數(shù)組,數(shù)組的下標即是坐標;2、對數(shù)組進行遍歷,并判斷當前坐標(x,y)是否滿足:x和y的數(shù)位之和小于等于k;

          如何計算位數(shù)之和?這里需要用到求余和除法,由于提示中告知k小于等于100,那么我們計算x坐標的位數(shù)和就只需要 (x/10) + (x%10),但對于k=100的情況需要單獨處理,k=100時,位數(shù)和=1。

          3、對于符合條件的坐標,我們需要繼續(xù)往上下左右四個方向進行搜索,指導遇到下面情況就退出搜索:

          ?超出邊界?不符合位數(shù)和的條件?已經(jīng)搜索過了,數(shù)組值為1

          4、為了記錄搜索的結(jié)果,我們可以將 [m][n]的二維數(shù)組設(shè)置成true和false或者0和1的值,符合條件就將數(shù)組值設(shè)置為1;5、最后我們再遍歷一次數(shù)組,統(tǒng)計數(shù)組值為1的數(shù)量即得出最終的結(jié)果。

          代碼實現(xiàn):

          class Solution {    public int movingCount(int m, int n, int k) {        if (m < 1 || n < 1) {            return 0;        }        if (k == 0) {            return 1;        }        int counter = 0;        int[][] arr = new int[m][n];        for (int i = 0; i < m; i ++) {            for (int j = 0; j < n; j++) {                 arr[i][j] = 0;            }        }
          ????????dfs(arr,?k,?0,?0);//從(0,0)開始搜索
          for (int i = 0; i < m; i ++) { for (int j = 0; j < n; j++) { if (arr[i][j] == 1) { counter++; } } } return counter; }
          private void dfs(int[][] arr, int k, int x, int y){ int m = arr.length; int n = arr[0].length;
          if (x<0 || x>m-1 || y<0 || y >n-1 || arr[x][y] == 1) { return; } if (calc(x,y) <= k) { arr[x][y] = 1; dfs(arr,k, x+1,y); dfs(arr,k, x-1,y); dfs(arr,k, x,y-1); dfs(arr,k, x,y+1); }
          }
          private int calc(int i, int j) { int sum = 0; if (i == 100) { sum += 1; } else if (i >= 10) { sum += (i/10) + (i%10); } else { sum += i; }
          if (j == 100) { sum += 1; } else if (j >= 10) { sum += (j/10) + (j%10); } else { sum += j; }
          return sum; }}


          測試開發(fā)棧

          軟件測試開發(fā)合并必將是趨勢,不懂開發(fā)的測試、不懂測試的開發(fā)都將可能被逐漸替代,因此前瞻的技術(shù)儲備和知識積累是我們以后在職場和行業(yè)脫穎而出的法寶,期望我們的經(jīng)驗和技術(shù)分享能讓你每天都成長和進步,早日成為測試開發(fā)棧上的技術(shù)大牛~~


          長按二維碼/微信掃描關(guān)注


          歡迎加入QQ群交流和提問:427020613

          互聯(lián)網(wǎng)測試開發(fā)一站式全棧分享平臺

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品高线在线观看 | 成人三级网站在线观看 | 伊人大香蕉www | 国产一二三在线观看 | 亚洲 日韩 欧美 国产 |