首页 > 移动平台 > 详细

[编程题]手机屏幕解锁模式

时间:2020-06-05 18:09:11      阅读:61      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

class Solution {
public:
    int vis[3][3];
    int ans[10];
    int dir[16][2] = {       //16个方向
        { -1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 },
        { 1, 0 }, { 1, -1 }, { 0, -1 }, { -1, -1 },
        {-2, 1 }, { -1, 2 }, { 1, 2 }, { 2, 1 },
        { 2, -1 }, { 1, -2 }, { -1, -2 }, { -2, -1 }
    };
    void dfs(int x, int y, int t)
    {
        if (9 == t)
        {
            return;
        }
        ans[t++]++;
        vis[x][y] = 1;
        for (int i = 0; i < 16; i++)
        {
            int dx = x + dir[i][0];
            int dy = y + dir[i][1];
            if (0 <= dx && dx < 3 && dy >= 0 && dy < 3 && vis[dx][dy] == 0)
            {
                dfs(dx, dy, t);
            }
            //如果前8个方向都走过了,可以沿着当前方向在走一步
            else if (i < 8)
            {
                dx = dx + dir[i][0];
                dy = dy + dir[i][1];
                if (0 <= dx && dx < 3 && dy >= 0 && dy < 3 && vis[dx][dy] == 0)
                {
                    dfs(dx, dy, t);
                }
            }
        }
        vis[x][y] = 0;
        return;
    }
    int solution(int m, int n) {
        memset(ans, 0, sizeof(ans));
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                memset(vis, 0, sizeof(vis));
                dfs(i, j, 1);
            }
        }
        int num = 0;
        if (m > n)
            return 0;
        else {
            if (n > 9)
                n = 9;
            ans[9] = ans[8];
            for (int i = m; i <= n; i++) {
                num = num + ans[i];
            }
            return num;
        }


    }
};

 

https://www.nowcoder.com/questionTerminal/c552248efdbd41a18d35b7a2329f7ad8

[编程题]手机屏幕解锁模式

原文:https://www.cnblogs.com/-citywall123/p/13050958.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!