一亩三分地

 找回密码 注册账号

扫描二维码登录本站

BBS
Offer多多
Salarytics
交友
Learn
Who's Hiring?
Visa Tracker
疫情动态
指尖新闻
Instant
客户端
微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
Youtube频道
留学博客
关于我们
查看: 153|回复: 0
收起左侧

[Leetcode] 353 Design snake game 总是过不了

[复制链接] |只看干货 |leetcode, 刷题
我的人缘0

升级   66%


分享帖子到朋友圈
小水 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (60)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
不明白x、y坐标为啥更新的不对,test case总是过不了。劳烦大神指正
[Java] 纯文本查看 复制代码
class SnakeGame {

    /** Initialize your data structure here.
        @param width - screen width
        @param height - screen height 
        @param food - A list of food positions
        E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. */
    int width;
    int height;
    int[][] food;
    int foodIndex;
    Deque<int[]> queue;
    public SnakeGame(int width, int height, int[][] food) {
        this.width = width;
        this.food = food;
        foodIndex = 0;
        queue = new ArrayDeque<>();
        queue.addLast(new int[]{0, 0}); 
    }  
    
    /** Moves the snake.
        @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down 
        [url=home.php?mod=space&uid=160137]@return[/url] The game's score after the move. Return -1 if game over. 
        Game over when snake crosses the screen boundary or bites its body. */
    public int move(String direction) {
        int[] curPos = queue.peekFirst();
        int curX = curPos[0];
        int curY = curPos[1];
        
        if (direction.equals("U")) {
            --curX; 
        } else if (direction.equals("D")) {
            ++curX;
        } else if (direction.equals("L")) {
            --curY;
        } else if (direction.equals("R")) {
            ++curY;
        }
    
        if (outOfRange(curX, curY) || isTouchBody(curX, curY)) {
            return -1;
        } else if (foodIndex < food.length && curX == food[foodIndex][0] && curY == food[foodIndex][1]) {
            foodIndex++;
            queue.addFirst(new int[]{curX, curY}); //头部增长
        } else {
            queue.removeLast();
            queue.addFirst(new int[]{curX, curY});//单纯前进
        }
        return queue.size() - 1;
    }
    
    boolean outOfRange (int x, int y) {
        return x < 0 || x >= height || y < 0 || y >= width;
    }
    
    boolean isTouchBody (int x, int y) {
        for (int[] pos : queue) {
            if (x == pos[0] && y == pos[1]) {
                if (x != queue.peekLast()[0] || y != queue.peekLast()[1]) {
                    return true;
                }
            }
        }
        return false;
    }
}



补充内容 (2020-9-22 12:23):
搞清楚哪错了,constructor里没传height……

评分

参与人数 1大米 +3 收起 理由
14417335 + 3

查看全部评分


上一篇:OA 遇到的一道题 请大佬帮忙看看
下一篇:求指导,duplicate subarray(一道codesignal的OA题)
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表