13. 机器人的运动范围

image.png
注意是只能从坐标[0,0]开始走,所以不一定能走到[10,1]这种地方。

思路一:深度优先遍历 dfs

image.png
计算能走到多少个方格,那么就不能重复,上一个题12. 矩阵中的路径(深度优先搜索(DFS)),是利用先标'\0'后复原的方法得到,但此题需要计算方格数
这里需要建立一个数组记录,
具体点,建立一个与矩阵等大的二维布尔数组,!!注意布尔类型默认值是false。


  • 优化个位十位的和

    • 数位和的一般求法:

       个位:x%10,x的模
       十位:x/10

    (说明:模和余数的区别在于:

    • 由于题中说明了最大只到两位数,且机器一次只走一步,因此只有两种情况:

      i;j=1,2,这样,11,12,这样,位和x只会增加1,xi++,xj++
      i;i=19,20,这样,29,30这样,位和x就会多减少8,xi-8,xj-8,

      因此可以优化为:

      (i+1)%10 = 0 ?xi=xi-8:xi=xi+1;
      
  • 官方:
    image.png

思路二:广度优先遍历 BFS

DFS是一条路一直走直到false,递归+boolean数组
BFS是右下一起走,直到走完,队列+boolean数组

遍历到一个点,就把右,下的点都传到数组里。

  • 注意:

    • 这里有个LinkedList<int[]>,往Set里传入的是一个数组的方式:!!

      queue.poll(new int[] {0,0,0,0,})
    • xi,xj就是i、j的个位十位数之和,一次只会突变一个,要么xi,要么xj。

操作:
image.png


MeeWoW
18 声望1 粉丝

加油