题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
我的代码:
1 class Solution { 2 public: 3 int Bsum(int num) 4 { 5 int sum = 0; 6 while(num) 7 { 8 sum += num%10; 9 num = num/10; 10 } 11 return sum; 12 } 13 int movingCount(int threshold, int rows, int cols) 14 { 15 int *matrix = new int[rows*cols]; 16 for(int i = 0; i < rows*cols; i++)//初始化 17 matrix[i] = 0; 18 return Count(threshold,matrix,rows,cols,0,0); 19 } 20 int Count(int threshold,int* matrix, int rows, int cols,int i, int j) 21 { 22 int sum = 0; 23 if(i >= 0&& j >= 0 && i < rows &&j < cols 24 && Bsum(i)+Bsum(j) <= threshold && matrix[i*cols+j] == 0 ) 25 { 26 matrix[i*cols+j] = 1; 27 sum =1+ Count(threshold,matrix,rows,cols,i+1,j)+ 28 Count(threshold,matrix,rows,cols,i,j+1)+ 29 Count(threshold,matrix,rows,cols,i,j-1)+ 30 Count(threshold,matrix,rows,cols,i-1,j); 31 } 32 return sum; 33 } 34 };
刚开始的思路是不对的,认为是从0,0出发,只能走一条路,最长为多少
正确的是:能走到的范围最多是多少,可以任意走,所以用暴力也可以
代码思路:就是一直找,标记一下走过的点
找bug找了好久,找到错误想把自己打死,cols和rows写反了
初始化也可以用memset(matrix,0,sizeof(),matrix*rows*cols);