力扣刷题记录【剑指13.机器人的运动范围】【js】

该博客讨论了一个算法问题,类似于单词搜索,但具有不同条件。问题涉及在一个m×n的网格中,从左上角开始,沿着四个方向移动,计算所有路径的总数,使得路径经过的每个单元格的行号和列号的位数之和不超过k。算法使用深度优先搜索(DFS)策略,并通过标记已访问的格子来避免重复计数。
摘要由CSDN通过智能技术生成

和【79.单词搜索】的思路很像,但是略有不同

/**
 * @param {number} m
 * @param {number} n
 * @param {number} k
 * @return {number}
 */
var movingCount = function(m, n, k0) {
    //初始化一个记录是否走过的空数组
    let form = new Array(m);
    for(let i=0; i<form.length; i++){
        form[i] = new Array(n);
        for(let j=0; j<form[i].length; j++){
            form[i][j] = 0;
        }
    }

    const move = function f(i,j,k){
        //判断i和j是否越界,此路不通
        if(i<0 || i>m-1 || j<0 || j>n-1) return 0;
        //判断是否走过,此路不通
        if(form[i][j]===1) return 0;

        //对i和j进行字符串转换的处理和计算
        let iString = i.toString();
        let jString = j.toString();
        let sum = 0;
        for (var a = 0;a<iString.length;a++){
            sum = sum + Number(iString[a]);
        }
        for (var a = 0;a<jString.length;a++){
            sum = sum + Number(jString[a]);
        }

        //位数和大于k,此路不通
        if (sum>k) return 0;

        //该格标记为走过,且不再归0,和剑指04题略有不同。
        form[i][j] = 1;

        //因为本格可达,所以要加1
        return 1 + move(i,j+1,k) + move(i+1,j,k) + move(i,j-1,k) + move(i-1,j,k);
    }

    return move(0,0,k0);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值