机器人的运动范围
题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
思路:
这题思路比较常规,设置标记数组,放置重复计数,然后开始向四周扩展。
代码如下:
class Solution { public: int count=0;int numSum(int num) { int rev=0; while(num) { rev+=num%10; num=num/10; } return rev; } void fun(int x,int y,int threshold,int rows,int cols,bool * flags) { if(x<0||y<0||x>=rows||y>=cols||flags[x*cols+y]) return; if(flags[x*cols+y]==false&&(numSum(x)+numSum(y)<=threshold) ) { flags[x*cols+y]=true; count++; fun(x+1,y,threshold,rows,cols,flags); fun(x-1,y,threshold,rows,cols,flags); fun(x,y+1,threshold,rows,cols,flags); fun(x,y-1,threshold,rows,cols,flags); } } int movingCount(int threshold, int rows, int cols) { bool * flags=new bool[rows*cols]; for(int i=0;i<rows;i++) { for(int j=0;j<cols;j++) flags[i*cols+j]=false; } fun(0,0,threshold,rows,cols,flags); return count; } };