题目:给定一个以0和1组成的迷宫矩阵maze,在这个矩阵中可以上下左右移动,但是每次移动只能向与所处位置的值不同的方向移动(1 -> 0 或 0 -> 1),请计算有多少个点对{(x1, y1),(x2, y2) } ,其中(x1, y1)坐标所对应的值为0,(x2, y2) 坐标所对应的的值为1,存在一种移动方式可以以(x1, y1)为起点出发最终到达(x2, y2)?
最后只做出45% 想不到怎么优化了 有没有大佬帮忙看看。。。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param maze int整型二维数组 * @return long长整型 */ int count = 0; public int getSurrend(int[][] maze, int x, int y, int flag) { int[][] dir = {{-1, 0}, {1 , 0}, {0, -1},{0, 1}}; int result = 0; for(int i = 0; i < dir.length; ++i) { int xt = x + dir[i][0]; int yt= y + dir[i][1]; if( xt< 0 || yt < 0 || xt >= maze.length || yt >= maze[0].length) { continue; } if(maze[xt][yt] == 1 - flag) { maze[xt][yt] = -1; result += getSurrend(maze, xt, yt, 1 - flag); } } if(flag == 0) { result += 1; } if(flag == 1) { count ++; } return result; } public long pathOfZeroAndOne (int[][] maze) { // write code here int result = 0; for(int i = 0; i < maze.length; ++i) { for (int j = 0; j < maze[0].length; ++j) { if(maze[i][j] == 1) { count = 0; maze[i][j] = -1; int temp = getSurrend(maze, i, j, 1); result += count * temp; } } } return result; } }
全部评论
(7) 回帖