LeetCode 剑指Offer 13 机器人的运动范围

题目

在这里插入图片描述

解题

深度优先和广度优先解题思路参考:
剑指 Offer 13. 机器人的运动范围( 回溯算法,DFS / BFS ,清晰图解)
在这里插入图片描述
在这里插入图片描述

解题一:深度优先搜索

// javascript
var movingCount = function(m, n, k) {
    const movingSteps = (i, j) => {
        visited[i][j] = true;
        // 如果 (get(i) + get(j)) > k,无法进入当前格子,无法再向当前格子的四周搜索
        if ((get(i) + get(j)) <= k) {
            cnt++;
            for (const [movei, movej] of directions) {
                const newi = i + movei, newj = j + movej;
                if (newi >= 0 && newi < m && newj >= 0 && newj < n && !visited[newi][newj]) {
                    movingSteps(newi, newj);
                }
            }
        }
    }
    let cnt = 0;
    const directions = [[1, 0], [-1, 0], [0, 1], [0, -1]];
    const visited = new Array(m).fill(false).map(() => new Array(n).fill(false));
    movingSteps(0, 0);
    return cnt;
};

const get = (i) => {
    let sum = 0;
    while (i > 0) {
        sum += (i % 10);
        i = Math.floor(i / 10); 
    }
    return sum;
};

在这里插入图片描述
在这里插入图片描述

// javascript
var movingCount = function(m, n, k) {
    const dfs = (i, j, sumi, sumj) => {
    	// 只会向左或向下,所以 i 和 j 必定大于等于 0
        if (i >= m || j >= n || visited[i][j] || (sumi + sumj) > k) return 0;
        visited[i][j] = true;
        const moveDownCnt = dfs(i + 1, j, (i + 1) % 10 ? sumi + 1 : sumi - 8, sumj);
        const moveRightCnt = dfs(i, j + 1, sumi, (j + 1) % 10 ? sumj + 1 : sumj - 8);
        return 1 + moveDownCnt + moveRightCnt;
    }
    const visited = new Array(m).fill(false).map(() => new Array(n).fill(false));
    return dfs(0, 0, 0, 0);
};

在这里插入图片描述

解题二:广度优先搜索

// javascript
var movingCount = function(m, n, k) {
    const queue = new Array();
    const visited = new Array(m).fill(false).map(() => new Array(n).fill(false));
    queue.push([0, 0]);
    let cnt = 0;
    while (queue.length > 0) {
        const [i, j] = queue.shift();
        if (i >= m || j >= n || visited[i][j] || get(i) + get(j) > k) continue;
        visited[i][j] = true;
        cnt += 1;
        queue.push([i + 1, j]);
        queue.push([i, j + 1]);
    }
    return cnt;
};

const get = (i) => {
    let sum = 0;
    while (i > 0) {
        sum += (i % 10);
        i = Math.floor(i / 10); 
    }
    return sum;
};

在这里插入图片描述

解题三:动态规划

在这里插入图片描述

// javascript
var movingCount = function(m, n, k) {
    const visited = new Array(m).fill(false).map(() => new Array(n).fill(false));
    // 起始位置一定能到达,cnt 初始化为 1,visited[0][0] 设为 true
    let cnt = 1;
    visited[0][0] = true;
    for (let i = 0; i < m; ++i) {
        for (let j = 0; j < n; ++j) {
            if ((i === 0 && j === 0) || (get(i) + get(j)) > k) continue;
            // 如果左边或者上面有格子,看是否为 true:只有左边或上面的格子可以走到当前格子
            // 否则尽管坐标和满足条件,但是无法连通
            visited[i][j] = (i >= 1 && visited[i - 1][j]) || (j >= 1 && visited[i][j - 1]);
            cnt += visited[i][j];
        }
    }
    return cnt;
};

const get = (i) => {
    let sum = 0;
    while (i > 0) {
        sum += (i % 10);
        i = Math.floor(i / 10); 
    }
    return sum;
};

在这里插入图片描述

内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值