今日刷三题(day11):不同路径的数目(一)+短距离最小路径和+把数字翻译成字符串

news2024/11/24 22:29:31

题目一:不同路径的数目(一)

题目描述:

一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?

输入输出描述:

输入:2,2                                       返回值:2

题目解析:

  • step 1:用dp[i][j]表示大小为i∗j的矩阵的路径数量,下标从0开始。
  • step 2:(初始条件) 当i或者j为0的时候,代表矩阵只有一行或者一列,因此只有一种路径。
  • step 3:(转移方程) 每个格子的路径数只会来自它左边的格子数和上边的格子数,因此状态转移为dp[i][j]=dp[i−1][j]+dp[i][j−1]。

作答情况:

属于简单题,正确。

代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public int uniquePaths (int m, int n) {
     int[][] dp=new int[m][n];
     for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
           if(i==0||j==0) {
            dp[i][j]=1;
           }else{
            dp[i][j]=dp[i][j-1]+dp[i-1][j];
           }
        }
     }
     return dp[m-1][n-1];
    }
}

题目二:短距离最小路径和

题目描述:

给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。

输入输出描述:

输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]               返回值:12

说明:

题目解析:

  • step 1:我们可以构造一个与矩阵同样大小的二维辅助数组,其中dp[i][j]表示以(i,j)位置为终点的最短路径和。
  • step2:判断特殊情况:二维数组只有一个值时,dp[0][0]=matrix[0][0]。
  • step 3:很容易知道第一行与第一列,只能分别向右或向下,没有第二种选择,因此第一行只能由其左边的累加,第一列只能由其上面的累加。
  • step4:只有一行或一列时,只能向右或向下走过来,(一行)   dp[0][j]=matrix[0][j]+dp[0][j-1];
               (一列)  dp[i][0]=matrix[i][0]+dp[i-1][0];
  • step 5:边缘状态构造好以后,遍历矩阵,补全矩阵中每个位置的dp数组值:因此状态转移公式为dp[i][j]=min(dp[i−1][j],dp[i][j−1])+matrix[i][j]。
  • step 4:最后移动到(n−1,m−1)的位置就是到右下角的最短路径和。

作答情况:

没有判断一行或一列情况下的特殊情况。

代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型二维数组 the matrix
     * @return int整型
     */
    public int minPathSum (int[][] matrix) {
       int m=matrix.length;
       int n=matrix[0].length;
       int[][] dp=new int[m][n];
       for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            //终点即起点
            if(i==0&&j==0)  dp[i][j]= matrix[i][j];
            //只有一行
            else if(i==0) dp[i][j]=matrix[i][j]+dp[i][j-1];
            //只有一列
            else if(j==0) dp[i][j]=matrix[i][j]+dp[i-1][j];
            //多行多列下任意位置,前一个只能向下或向右来到达
            else  dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+matrix[i][j];
        }
       }
       //移动到右下角
       return dp[m-1][n-1];
    }
}

题目三:把数字翻译成字符串

题目描述:

有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果。

输入输出描述:

输入:"12"                                      返回值:2

说明:2种可能的译码结果(”ab” 或”l”)

输入:"31717126241541717"        返回值:192

题目解析:

1.用辅助数组dp表示前i个数的译码方法有多少种。

2.数字为单数:数字非零(1种),数字为零(0种)

3.数字为多位数:

3.1 数字种存在0:数字中有10和20(两位数:1种,多位数:dp[i]=dp[i-2]种)

                             数字不是10和20(0种)

3.2  数字中没有0:数字范围为11~19  21~26 (两位数:2种,多位数:dp[i]=dp[i-2]+dp[i-1]种)

                              数字范围大于26(两位数和多位数都是dp[i]=dp[i-1])

作答情况:

数字种存在0:数字中有10和20 没有判断两位数和多位数情况。

代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
       int m=nums.length();
       //dp[i]:到了i位置上把数字翻译成字符串的方式有几种
       int[] dp=new int[m];
       //(数字是单数)
       if(nums.charAt(0)!='0') dp[0]=1;
       else dp[0]=0;
       //(数字是多位数)从第二位开始遍历
       for(int i=1;i<dp.length;i++){
        //尾位置存在0
        if(nums.charAt(i)=='0'){
            //0前面是1或2开头
if(nums.charAt(i-1)=='1'||nums.charAt(i-1)=='2'){
   //数字是两位
   if(i==1) dp[i]=1; 
   //数字是多位
   else  dp[i]=dp[i-2];
}
//   //0前面不是1或2开头
else{
    dp[i]=0;
}
        }
        //尾位置不存在0
        else {
if((nums.charAt(i-1)=='1'&&nums.charAt(i)<='9')||(nums.charAt(i-1)=='2'&&nums.charAt(i)<='6')){
    //两位
    if(i==1) dp[i]=2;
   // 多位
   else
dp[i]=dp[i-1]+dp[i-2];
} 
else dp[i]=dp[i-1];
        }
       }
       return dp[m-1];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】第二讲:字符串相关类

个人主页&#xff1a;深情秋刀鱼-CSDN博客 Java专栏&#xff1a;Java程序设计 目录 一、String 1.Java中的数据类型 2.字符串概述 3.字符串构造方法 4.字符串构造内存原理 5.字符串比较 6.字符串常见方法 二、StringBuilder 1.定义 2.常用方法 3.StringBuilder内存分…

vue 金额组件,输入提示单位:‘千’、‘万’、‘十万’...并用‘,’三个格式化

近期项目中遇到一个需求&#xff0c;金额输入框&#xff0c;输入过程中自动提示‘千’、‘万’、‘十万’、‘百万’......等单位提示&#xff0c;鼠标失去焦点后&#xff0c;并用‘,’三位隔开计数。 例如&#xff1a; 输入&#xff1a;12345.99 失去焦点&#xff1a;12,34…

小满OKKICRM与金蝶云星空对接集成客户列表查询(更新列表)打通客户新增

小满OKKICRM与金蝶云星空对接集成客户列表查询(更新列表)打通客户新增 接通系统&#xff1a;小满OKKICRM 深圳市小满科技有限公司&#xff08;简称&#xff1a;小满科技&#xff09;成立于2013年3月&#xff0c;公司位于深圳市南山区高新园区&#xff0c;是一家国家级高新技术企…

BetterMouse for Mac激活版:鼠标增强软件

BetterMouse for Mac是一款鼠标增强软件&#xff0c;旨在取代笨重的、侵入性的和耗费资源的鼠标驱动程序&#xff0c;如罗技选项。它功能丰富&#xff0c;重量轻&#xff0c;效率优化&#xff0c;而且完全隐私安全&#xff0c;试图满足你在MacOS上使用第三方鼠标的所有需求。 B…

cmake进阶:文件操作之写文件

一. 简介 cmake 提供了 file() 命令可对文件进行一系列操作&#xff0c;譬如读写文件、删除文件、文件重命名、拷贝文件、创建目录等等。 接下来 学习这个功能强大的 file() 命令。 本文学习 CMakeLists.txt语法中写文件操作。 二. cmake进阶&#xff1a;文件操作之写文件…

Gin 框架的使用

1、Gin 快速开发 1.1、环境准备 1.1.1、导入 gin 依赖 这里就叫 gin 依赖了&#xff0c;在 Goland 命令行中输入下面的命令&#xff1a; go get -u github.com/gin-gonic/gin 1.1.2、设置代理 如果下载失败&#xff0c;最好设置一下代理&#xff0c;在 cmd 命令行中输入下…

深度学习之基于Matlab Googlenet网络男女性别识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着计算机视觉技术的快速发展&#xff0c;性别识别在多个领域中都展现出了广泛的应用前景&#xff…

基于springboot实现志同道合交友网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现志同道合交友网站系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生&#xff0c;其可以…

SpringMVC简介和体验

一、SpringMVC简介和体验 1.1 介绍 Spring Web MVC :: Spring Framework Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#…

修改idea缓存的默认存储位置

打开idea.properties 找到 # idea.config.path${user.home}/.IntelliJIdea/config # idea.system.path${user.home}/.IntelliJIdea/system 将${user.home}替换成你要存储到的路径 再次打开idea时会弹出消息&#xff0c;点击ok即可。

Mujoco210和Mujoco-py在 Ubuntu22.04 下的安装

mujoco和mujoco-py的关系&#xff1a;mujoco是一个物理引擎&#xff0c;主要应用于强化学习和最优化控制领域。mujoco-py是mujoco编程的 Python 接口&#xff0c;由OpenAI Gym开发&#xff0c;可以使用mujoco_py方便地调用mujoco的API。 mujoco官网&#xff1a; https://mujoco…

探无止境,云游未来 | “游戏出海云”发布

4月28日下午&#xff0c;2024中国移动算力网络大会之“游戏出海”分论坛在江苏省苏州金鸡湖国际会议中心圆满落幕。 此次论坛由中国移动海南公司主办&#xff0c;中国移动通信集团政企事业部、中国移动云能力中心、中国移动国际公司共同协办。海南省工业与信息化厅副厅长黄业晶…

webpack4和webpack5区别1---loader

webpack4处理图片和字体的loader file-loader file-loader的作用是处理webpack中的静态资源文件。File Loader可以将各种类型的文件&#xff0c;如图像、字体、视频等转换为模块并加载到Web应用程序中。它通过import或require语句引入文件资源&#xff0c;并将其放置在输出目…

C++类细节,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载&#xff1f; 4. 类变量vs实例变量5. 类方法及其特点6. 空类vs空结构体6.1. 八个默认函数&#xff1a;6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量指针常量 8. 接口vs抽象类9. 浅…

likeshop多商户单商户商城_likeshop跑腿源码_likeshop物品租赁系统开源版怎么配置小程序对接?

本人是商业用户所以能持续得到最新商业版&#xff0c;今天我说下likeshop里面怎么打包小程序&#xff0c;大家得到程序时候会发现它有admin目录 app目录 server目录 这三个目录分别是做什么呢&#xff1f; 1.admin目录 下面都是架构文件使用得是Node.js打包得&#xff0c;至于…

使用 AsyncOpenAI 库异步调用 OpenAI API 同时回答多个问题

目录 模型部署 不使用 async 使用 async 使用 async 完整代码 模型部署 首先&#xff0c;直接将 vLLM 部署为模仿 OpenAI API 协议的服务器&#xff0c;我这里选用的模型为 Meta-Llama-3-70B-Instruct python -m vllm.entrypoints.openai.api_server --model /root/auto…

视频质量评估

视频质量评估 一、全参考客观视频质量评价方法三、MSSIM四、STRRED五、VMAF六、MOS 一、全参考客观视频质量评价方法 全参考客观视频质量评价方法是指把原始参考视频与失真视频在每一个对应帧中的每一个对应像素之问进行比较。准确的讲&#xff0c;这种方法得到的并不是真正的…

✩✩✩探索绍兴ISO9001认证:打造品质新高度✩✩✩

&#x1f50e;探索&#x1f497;绍兴ISO9001认证&#xff1a;&#x1f3af;打造品质新高度✨ &#x1f481;‍♂️今天来聊聊&#x1f449;绍兴的ISO9001认证&#xff0c;✍️这可是品质管理领域的♨️一个大热门话题&#xff01;&#x1f525; 你知道吗&#xff0c;&#x1f3…

ChatGPT4 Turbo 如何升级体验?官网如何使用最新版GPT-4 Turbo?

本文会教大家如何教大家升级自己的GPT4到GPT4 Turbo&#xff0c;同时检验自己的GPT4 Turbo是否是最新版本的GPT-4-Turbo-2024-04-09 说明 新版GPT-4 Turbo再次重夺大模型排行榜王座&#xff0c;超越了Claude 3 Opus。 最新版本的GPT-4 Turbo被命名为GPT-4-Turbo-2024-04-09。…

C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…