第七章 递归、DFS、剪枝、回溯等问题 ------------- 7.3 题解:机器人走方格问题

[剑指Offer]机器人走格子[Python] 题目要求:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:预备工作----->将每一行和... 阅读详情

机器人走方格

一、问题:

   有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。 请设计一个算法,计算机器人有多少种走法。 给定两个正整数int x,int y,请返回机器人的走法数目,保证x+y小于等于12。

二、思路:

  思考这类看起来很复杂的问题,实际上就越有规律可循,我们先列举一些简单的情况,再由简到繁,逐步得出结果,逐步发现规律。就是说先解决简单情况下的问题,然后再推广到复杂情况下的问题。就比如这道题目,先假如只有1个格子,那很明显只有一种走法,那么我们再去画 1 * 2,2 * 1,1 * 3,3 * 1,也只有1种走法,再去画2 * 2 的方格,发现有两种走法了。

  当我们处于2 * 2的方格的时候我们可以首先往右走一个方格,那么此时我们处于两行一列的状态,我们也可以往下走一个方格那么我们处于一行两列的情况那么1 * 2与2 * 1的走法我们原来是知道的,所以把这两种走法加起来就得到了2 * 2 方格的走法,也就是两种走法。

  当我们处于2 * 3的方格的时候我们可以首先往右走一个方格,那么此时我们处于两行两列的状态,我们也可以往下走一个方格那么我们处于一行三列的情况那么2 * 2与1 * 3的情况我们原来是知道的,所以把这两种走法加起来就得到了2 * 3 方格的走法总共有3种走法,依次类推

  于是我们根据分析就可以得出递推式f(x , y) = f(x - 1, y) + f(x , y - 1)(因为只能向右走和向下走)

  所以我们可以使用递归的方式来解决这个问题,其次我们也可以使用迭代(递推)的方式来解决,因为涉及到两个变量都在变化,使用一维的变量是不能够保存的,所以要使用二维的数据结构:二维数组来保存从起始点到某一点的走法,比如说a[2][3]=3,表示机器人到这一个点总共有3种走法。

  使用递归的话就相当于一种富人的思想,把什么都交给手下人去做,自己只负责合并结果,代码很简洁。而迭代(递推)相当于打工者的思想,一步步根据自己的分析得出想要的结果,代码相对来说比递归要复杂一点。

三、代码: 

public class 机器人走格子 {

    public static void main(String[] args) {
        System.out.println(solve(3, 3));   // 输出 6
        System.out.println(solve1(3, 3));  // 输出 6
    }
    
    /**
     * 递归形式
     */
    static int solve(int x,int y){
        if( x==1 || y==1 ) return 1;
        return solve(x-1, y)+solve(x, y-1);
    }
    
    /**
     * 迭代形式
     */
    static int solve1(int m,int n){
        int [][]state = new int[m+1][n+1];
        for (int i = 1; i <= n; i++) {
            state[1][i] = 1;
        }
        for (int i = 1; i <= m; i++) {
            state[i][1] = 1;
        }
        for (int i = 2; i <=m ; i++) {
            for (int j = 2; j <=n ; j++) {
                state[i][j] = state[i][j-1] + state[i-1][j];
            }
        }
        return state[m][n];
    }

}

四、结果:

走格子经典题 A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the 阅读详情

相关推荐

51nod 1118 机器人走方格(简单DP)

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。 Input 第1行,2个数M,N,中间用空格隔开。(2  Output 输出走法的数量。 Input示例 2 3

逝水流年轻染尘 1390

机器人走方格[DP/DFS]

题意: DFS思路:就直接搜就好了,方向只有2个,向右想下。出口就是越界失败的情况,或者到了右下角成功就加1的情况。 DP思路: 动态规划问题:处理重复子问题,即在DFS思路中,一条路径比如1-4-7-9-10即正确的路径,那么对于1-4-7-8-10也是正确的路径 其中1-4-7就是重复的子问题,又会在走一遍,其中肯定有判定等等问题,数据规模小还行,大肯定过不去。 DP解题思路: ...

weixin_43885656的博客 317

西门子S7-1200的PID应用(恒温热水器)

物料清单:1200PLC一台,模拟量输入模块SM1231(PLC自带的输入通道不支持4-20mA电流输入)一个,PT100一个,温度变送器,热得快,固态继电器。 第一步,硬件接线; 第二步,新建1200工程,添加PLC和模拟量输入模块,修改模块的模拟量输入类型为4-20mA,模拟量模块的IO地址为96-103(8个字); 第三步,新建循环组织块OB30,循环时间选择默认点1...

weixin_30835649的博客 6549

计蒜客:机器人走方格

题解:机器人走方格!

kzhshsh的博客 1047

codesys多协议通信之OPC UA通信

测试不易,转载请注明出处!

weixin_44243068的博客 3638

Imagiq AI-PQ 图像质量增强模块详解:联发科 ISP 中的 AI 图像管线实战解析

随着智能手机影像系统对图像质量要求的持续提升,联发科在其 Imagiq ISP 中引入了 AI 驱动的图像增强模块——AI-PQ(AI-based Picture Quality),通过 AI 模型对亮度、色彩、噪声、锐度等多个维度进行动态调节与增强,实现更加智能化和个性化的图像输出效果。AI-PQ 在实际工程中已成为影响照片风格、视频观感和多模组一致性的核心能力之一。本文围绕 Imagiq 平台最新一代 AI-PQ 模块(2024-2025年量产平台为基础),结合实机开发与调优经验,深入剖析其各子模块的算

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1423

机器人走格子(递归 / 动态规划)

cc150 9.2 分析: 动态规划是有小到大得进行 递归表面从大到小,实际从小到大 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sca = new Scanner(System.in); int x = sca.nextIn...

qq_42794545的博客 1195

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 328

机器人走方格(递归)

1. 问题描述: 有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。 请设计一个算法,计算机器人有多少种走法 给定两个正整数int x,int y,请返回机器人的走法数目,保证x+y小于等于12 2. 一开始的时候很正常都是没有思路的,所以把问题想得很复杂那么但是越复杂的时候我们越需要冷静,这个时候我们就需要使用一些简单的例子帮助我们来分析问题,因为这些简...

二哈 3888

手把手教你学基带SOC芯片(4.4.9)--基带芯片的电源管理实例:高通 Snapdragon 系列实例(十)

Snapdragon 888 通过支持多种深度睡眠模式,如 AOAC 模式、低功耗模式和深度睡眠模式,以及智能电源管理技术,实现了对功耗的精细管理。这些模式不仅延长了设备的电池寿命,还确保了用户在各种使用场景下的良好体验。无论是保持网络连接、限制后台活动,还是完全关闭不必要的功能,Snapdragon 888 都能够灵活应对,提供高效的功耗管理方案。

MHD0815的博客 740

在 SAP S/4HANA Public Cloud 中做产品扩展:从 Key User 到 ABAP Cloud 与 BTP 的三轨实践指南

摘要:SAP S/4HANA Public Cloud 提供三种扩展方式(key user、developer extensibility 和 side-by-side),遵循 clean core 原则确保升级稳定。key user 扩展适合无代码轻量改良,developer extensibility 用于受控 ABAP 开发,side-by-side 则适用于云原生独立应用。文章通过销售订单优先级字段、退货审批微服务和采购校验等案例,说明不同扩展路径的适用场景与实现方法,帮助开发者在三系统景观中合理选

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 294

剑指offer算法题目总结之机器人走格子

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? //思路:dfs,搜索四个方向,vis记录该方格是否被搜索过, // 预判方格是否合法,合法就从该方格接着搜索 public class Solution {

jz6666jz的博客 652

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 38

算法练习——机器人走方格

有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。 给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。 其实就是用了递归的方法,限定好初试条件就好了 import java.util.*; public class Robot { public int countWa

a879365197的专栏 4154

【红外技术】DDE算法:HE在红外图像可视化上的应用(附源码)

并且数据一般是以 8 的整数倍的位宽在电子系统中应用,因此大多数的显示器的显示位宽为 8bit,共 256 个灰阶。为了使红外图像可视化,因此需要一种“数据压缩”技术,还需要既可能的不丢失原始图像信息。HE后的图像直方图分布比较均匀离散,图像对比度好。但是HE算法只是适用某些图像,它是将灰度集中区域进行拉伸得到,也会放大该集中区域的噪声,它是一种“不公平”的映射。以下是红外细节增强算法的演示,很明显右边的图像,展现了更多的图像细节,对于小目标的观测非常友好。文章已于2019-12-02修改。

sunwindl91181的博客 911

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

机器人走方格

机器人走方格 1.题目描述 有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。 请设计一个算法,计算机器人有多少种走法。 给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。 2.分析图解 3.代码实现(两种方法 递归&迭代) public class Demo15 { public static void main(...

sparky的博客 483

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

回溯——矩阵中路径问题(0,1矩阵中最优路径、矩阵中的路径、机器人的运动范围)

问题一: 给定一个rows*cols 大小的0,1矩阵,给出起点和终点坐标,0可以走,1不可以走,每次只能向上下左右,走一步,求出从起点到终点的最短路径; 解题思路:回溯法解决的经典问题,由于回溯的递归特性,首先要找到递归结束的条件,本题终点就是结束条件(在递归结束判断此路径是否为最优路径)                     其次,找出递归的条件,本题是坐标x,y的值在合理范围内,并且此

helloworldding的博客 4061

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

机器人的运动范围(dfs)

地上有一个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: 输入:m = 2, n = 3, k = 1 输出:3 示例 2: 输入:m = 3, n

I_Nice2cu的博客 317

蓝桥杯真题c语言走方格,[蓝桥杯][2013年第四届真题]剪格子 (C语言代码)------------C语言—菜鸟级...

解题思路:DFS 从左上角 开始 进行 深搜 所有可能,选出最小的。但有一个特殊情况 如下图 这种情况 被起始点分成了两部分 ,若直接DFS 会出错;所以得对起始点做做文章 看看代码就懂了 即使 将起始点取值后不标记,再次DFS 到它时值和格子数都增加 即可。访问原文 欢迎访问我的博客注意事项:参考代码:#includeinta[10][10];//存值intb[10][10];//...

weixin_30611317的博客 295

关于走格子的问题

dfs: 所有可能的路径,是否存在某一条路径 bfs: 遍历图,最短路径 深度优先搜索利用了栈进行计算,而宽度优先搜索则利用了队列进行计算 1.简单版:从(0,0)走到(n,m),只能往下或往右走,最短的路径。(这里最短路径的意思就是只会走m+n个空格)注意这里的矩阵大小是(m+1)*(n+1) 多少种走法:C(m+n,n),或者用动态规划的方式求解。 记录路径:用dfs typed...

github_38818603的博客 1502

牛客网 | 机器人走方格II

题目描述 有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。注意这次的网格中有些障碍点是不能走的。 给定一个int[][] map(C++ 中为vector >),表示网格图,若map[i][j]为1则说明该点不是障碍点,否则则为障碍。另外给定int x,int y,表示网格的大小。请返回机器人从(0,0)走到

weizaishouex2010的专栏 1153

用回溯法走迷宫,较简易代码

这应该算是第一份回溯写迷宫的代码,寒假写的时候出了点小毛病一直显示找不到路径,连续几天都没有思绪,后面来学校在学霸的帮助下发现了原因 在main函数里定义了offset数组,在外面又同时定义了一个数组,结果在seekpath函数里面调用的是外面定义的那个,外面定义的没赋值。。结果就一直。。#include #include using namespace std ; const int m =

吃苦胆的野狼 1724

Java 跳格子——二分枝、dfs纵横、递归

小明参加了学校的趣味运动会,其中的一个项目是:跳格子。 地上画着一些格子,每个格子里写一个字,如下所示: 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。 请你帮助小明算一算他一 共有多少种可能的跳跃路线呢? p...

七七的博客 1020

dfs+回溯算法 -poj踩方格

题目连接 4982:踩方格 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b. 走过的格子立即塌陷无法再走第二次; c. 只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 输入 允许在方格上行走的步数n(n <= 20) 输出 计算出的方案数量 样

BOWWOB的博客 316

关于DFS几道比较基础的题

题目一 FatMouse and Cheese 题目大意就是说有一个老鼠在N*N的网格当中每一步最多只能走K格 并且由于猫的存在每一次老鼠的移动都必须比路径上一个网格收集的奶酪多 问这条路径上老鼠收集的奶酪最大值 Sample Input 3 1 1 2 5 10 11 6 12 12 7 -1 -1 Sample Output 37 PS: 终点的位置不是固定的 满足上下左右都不存在比...

qq_33961229的博客 362
上一篇: 第六章 数学问题 -------- 6.14 【快速幂】斐波那契数列
下一篇: 第七章 递归、DFS、剪枝、回溯等问题 ------------- 7.4 硬币表示某个给定数值
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值