首页 > 鹰角网络2021/8/19笔试 最后一题
头像
SilverCrown
编辑于 2021-08-20 11:14
+ 关注

鹰角网络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;

    }

}

全部评论

(7) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐