码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer(六十六)之机器人的运动范围

时间:2016-06-12 02:00:26      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

代码:

<span style="color:#000099;">import java.util.*;
public class Solution {
    public int movingCount(int threshold, int rows, int cols)
    {
         boolean[][] vist = new boolean[rows][cols];
        //从开始0,0位置进行BFS搜索
       return bfsSearch(0, 0,rows, cols, vist, threshold);
    }
    private int bfsSearch(int i, int j, int rows, int cols, boolean[][] vist, int threshold)
    {
            //不合法
           if(i<0 || i>=rows || j<0 || j>=cols || vist[i][j] ||(numSum(i)+numSum(j)>threshold))
              return 0;
            vist[i][j] = true;
                        //四个方向
            return bfsSearch(i-1, j, rows, cols, vist, threshold)+
                bfsSearch(i+1, j, rows, cols, vist, threshold)+
                bfsSearch(i, j-1, rows, cols, vist, threshold)+
                bfsSearch(i, j+1, rows, cols, vist, threshold)+1;
    }
    private int numSum(int i)
    {
        int sum = 0;
        while(i != 0)
        {
          sum += i%10;
          i/=10;
        }
        return sum;
    }
}</span>


剑指offer(六十六)之机器人的运动范围

标签:

原文地址:http://blog.csdn.net/baidu_21578557/article/details/51637719

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!