鹰角网络2021/8/19笔试 最后一题
题目:给定一个以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;
}
}
查看9道真题和解析