首页 > 其他分享 >LeetCode 剑指 Offer 13. 机器人的运动范围

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

时间:2023-07-13 22:33:57浏览次数:60  
标签:13 used 格子 Offer int 机器人 bool 走过 LeetCode

题目链接:LeetCode 剑指 Offer 13. 机器人的运动范围

题意:

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),
也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

解题思路:

1. 使用一个二维的bool数组标记每个格子是否走过
2. 从左上角开始,一直尽可能的向右,向下走(因为每次都是选择没有走过的格子,初始时已经在左上角,因此一旦开始行走,无论当前在哪一个格子,它左边、上面的格子一定是已经是走过的)
3. 利用 除 10 取余的方式,求各位数字之和

代码1:

var ans int
var used [][]bool
func movingCount(m, n, k int) int {
    ans = 0   // 结果
    used = make([][]bool, m)  //创建一个二维bool数据,用来标记是否走过
    for i := range used {   
        used[i] = make([]bool, n)
    }
    bfs(m, n, 0, 0, k) 
    return ans
}
func bfs(m, n, x,y, k int) {
    if x >= m || y >= n || used[x][y] || getSum(x) + getSum(y) > k {  //如果越界、走过或者大于K ,直接返回
        return
    } 
    // 否则走这个格子
    used[x][y] = true   //标记当前格子已经走过
    ans++  //走过的格子加1
    bfs(m, n, x+1, y, k)  //向下走
    bfs(m, n, x, y+1, k)  //向右走
}

func getSum(n int) int { // 计算各位数字之和
    res := 0
    for n != 0 {
        res += n%10
        n /= 10
    }
    return res
}

标签:13,used,格子,Offer,int,机器人,bool,走过,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17552375.html

相关文章

  • 7.13
    今天上午我大爷爷家的小孙子过满月,一大早就开车出去吃饭去了,下午去驾校练车,学了侧方停车和S型路和过直角弯,晚上的时候我爸一个朋友的儿子高考结束要我们两个同龄人认识一下,之后好帮帮忙啥的又出去吃饭了。今天没有打代码,就看了一会网课学习了方法的重写和super的讲解。......
  • 剑指 Offer 16. 数值的整数次方
    剑指Offer16.数值的整数次方这是在面试时候,无准备折腾除了的递归写法。classSolution{publicdoublemyPow(doublex,intn){//if(x==0)return0;//longb=if(n==0)return1.0;if(n==1)returnx;//把n为负......
  • 暑假训练2023.7.13
    CodeforcesRound884(Div.1+Div.2)A.SubtractionGame简单构造,输出a+bB.Permutations&Primes2和3都是质数,1不是,因此满足条件的区间一定包含1。把1放到序列最中间,2和3放到两端其他数字随意排列,可以证明此序列得到的素数mex的个数最大,为\(\lfloor\frac{n+1}{2}\rfl......
  • 2023-07-13:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串
    2023-07-13:如果你熟悉Shell编程,那么一定了解过花括号展开,它可以用来生成任意字符串。花括号展开的表达式可以看作一个由花括号、逗号和小写英文字母组成的字符串定义下面几条语法规则:如果只给出单一的元素x,那么表达式表示的字符串就只有"x"。R(x)={x}例如,表达式"a"......
  • 《摆与混》第十一章--7月13日--周四
    周四,值的反思的一天;1.今天做了什么:今天9点起。洗漱后,纠结于早餐的形式,上午的学习有些心不在焉,下午摆烂时间依旧存在心理斗争,5点出发健身锻炼,饭后看了几场比赛,今天也许无所事事,也许规划满满,我不禁反思什么才是真正的暑假,对于时间的苛责与暑假生活的罪恶感的斗争,这些事情消磨时间与......
  • CF1336C(挺重要的区间dp)
    KaaviandMagicSpell-洛谷|计算机科学教育新生态(luogu.com.cn)我们直接考虑如何构造出来的字符串,这个字符串显然只能每次最左端加或者最右端加入。对于第一个字符,显然每个位置都够能放置,且有两种方案。接着下一个字符加入它的左端或者右端,依次类推。令dp[i][j]为s(1......
  • 7.13总结
    今天总结稍微累点,但也比较充实上午起来后学姐告诉我了视频需要修改的地方,有些目前还改不了,所以打算以后改,后来做了pta,好消息是达到了1500分,该写报告了。下午看了java的课,还是面向对象,学到了接口这个知识点,这个是c++没有的,简单来说是一种规则,而且可以类比成一个抽象类,这还是比较......
  • 7.13打卡
    1.字符常量使用单引号,字符串常量使用双引号表示2.两者均支持转义字符表示,转义字符形式可以参见之前文章。3.以下几种情况必须区别对待:‘A’ 表示单个字符大写字母A,占用1个字节空间“A” 表示字符串,该字符串只有1个大写字母A组成,占用2个字节空间,每个字符串末尾自动会加上一......
  • 7月13日 今日所学 分享整理
    #define_CRT_SECURE_NO_WARNINGS1#include<string.h>#include<stdio.h>intmain(){ intarr1[10]={1,2,3};//不完全初始化 chararr2[5]={1,2,3,4,5}; chararr3[]={1,2,3,4}; chararr4[5]={1,2,3}; chararr5[3]={'a'......
  • 2023.7.13
    今天是养生开始的第一天,我昨天在小诊所买了一些养生的东西,泡一杯茶水,吃一些东西,为未来的消耗做好准备,早上在家里练习乒乓球,中午做一碗番茄炒蛋,下午看了看篮球赛,晚上学习编程1小时,生活再简单不过,不过看你怎么过,世界没有那么难过,就是一定要过去,心平气和地过一天,日复一日,不断进步。......