dp(七)把数字转化为字符串 (力扣版+牛客版) 跳台阶问题+最小花费跳台阶

news2024/10/6 1:36:54

目录

l剑指 Offer 46. 把数字翻译成字符串力扣版本

 把数字翻译成字符串_牛客题霸_牛客网牛客版

 滚动数组优化

跳台阶【一】 (大数取模)一 八个零七

最小花费爬楼梯


l剑指 Offer 46. 把数字翻译成字符串力扣版本

 给定一个数字,按照对应的格式把数字转化为字符串,我把线性dp的题做多了,竟然对于这种青蛙跳台阶的变式题竟然不会了

状态F(i):表示前i个数字的翻译方法

转移方程的推导:开始了我的固定思维模式,给出一个i位置,然后从头定义j位置,然后分为前j个位置的方法个数+F(j+1, i)的二维遍历模式,然而没有理清题意,之前的回文串分割、公共串等都是需要从头定义二维的dp模式,然而这道题仅需处理i位置的前俩个位置元素即可

F(i) = F(i-2)+F(i-1)(在这俩个数组成的数字大于等于10小于等于25即可)

         F(i-1) (不满足上方条件)

初始化dp数组大小为nums.size()+1

dp[0] = dp[1] = 1;

#include<stdlib.h>
class Solution {
public:
    int translateNum(int num) {
        // 转为字符串
        string str = to_string(num);
        int n = str.size();
        // 初始化dp数组全为1,至少每个数字转化为一种
        vector<int> dp(n+1, 1);
        for(int i = 2; i <= n; i++)
        {
            int temp = 10*(str[i-2]-'0')+(str[i-1]-'0');
            // 如果前俩个组成的数字在【0, 25】
            if(temp>=10 && temp<=25)
                dp[i] = dp[i-1]+dp[i-2];
            else
                dp[i] = dp[i-1];
        }
        return dp[n];
    }
};

 把数字翻译成字符串_牛客题霸_牛客网牛客版

有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。

现在给一串数字,返回有多少种可能的译码结果

这俩个版本不同之处就是牛客上面这个是不能存在0的,并且当为10或者20只能是一种翻译结果,而且超出了26以上的双位或以上的数都不满足例如 100,50,(即当遇到0的时候前面只能为1或者2,如果是别的数那就无法进行翻译)


class Solution {
public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    int solve(string nums) {
        // write code here
        int n = nums.size();
        if(nums[0]=='0')
        return 0;
        if(nums=="10" || nums=="20")
        return 1;
        for(int i = 1; i < n; i++)
            if(nums[i] == '0')
                if(nums[i-1]!='1' && nums[i-1]!='2')
                    return 0;
        vector<int> dp(n+1, 1);
        for(int i = 2;i <= n; i++)
        {
            int temp = 10*(nums[i-2]-'0')+(nums[i-1]-'0');
            if((temp>10 && temp<20) || (temp>20&&temp<=26))
                dp[i] = dp[i-1]+dp[i-2];
            else
                dp[i] = dp[i-1];
        }
        return dp[n];
    }
};

 滚动数组优化

当然也可以使用滚动数组来进行优化,是一种思想,只用到前面俩个元素的值,完全就可以不需要构建一整个数组。即用三个变量就可以完成一整个功能

#include<stdlib.h>
class Solution {
public:
    int translateNum(int num) {
        // 转为字符串
        string str = to_string(num);
        int n = str.size();
        // 初始化dp数组全为1,至少每个数字转化为一种
        int dp1 = 1;
        int dp2 = 1;
        int max = 1;
        for(int i = 2; i <= n; i++)
        {
            int temp = 10*(str[i-2]-'0')+(str[i-1]-'0');
            // 如果前俩个组成的数字在【0, 25】
            if(temp>=10 && temp<=25)
                max = dp1+dp2;
            else
                max = dp1;
            dp2 = dp1;
            dp1 = max;
        }
        return max;
    }
};

跳台阶【一】 (大数取模)一 八个零七

class Solution {
public:
    int numWays(int n) {
        int dp1 = 1;
        int dp2 = 1;
        int max = 1;
        for(int i = 2; i <= n; i++)
        {
            max = (dp1+dp2)%1000000007;
            dp1 = dp2;
            dp2 = max;
        }
        return max;
    }
};

 【最小花费爬楼梯】

给定一个整数数组 cost cost  ,其中 cost[i] cost[i]  是从楼梯第i i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        // write code here
        int n = cost.size();
        vector<int> dp(n+1, 0);
        for(int i = 2; i <= n; i++)
        {
            dp[i] = min(dp[i-2]+cost[i-2], dp[i-1]+cost[i-1]);
        }
        return dp[n];
    }
};

 

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

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

相关文章

【微信小程序入门到精通】—小程序实战构建售货平台首页

目录前言一、步骤阐述二、新建项目并梳理结构三、配置导航栏四、tabBar 实现五、轮播图实现总结前言 对于目前形式&#xff0c;微信小程序是一个热门&#xff0c;那么我们该如何去学习并且掌握之后去做实际项目呢&#xff1f; 为此我特意开设此专栏&#xff0c;在我学习的同时也…

买车是个计算题,看上了比亚迪的宋DMI,选择困难了,选择55km的还是,110km的,理科生一起计算下。

1&#xff0c;背景 赶时髦&#xff0c;啥新鲜就购买啥&#xff0c;最火的车子当然是比亚迪宋dmi。 大家都买说明还不错&#xff0c;买车还要排队。等上一阵子了。 而且可以省下购置税。 就按照最热销的110 km 的版本 17/1.13*0.1 1.50 w 按照发票上“价税总计”金额计算的话…

计算两个字符串的相似度difflib.SequenceMatcher

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算两个字符串的相似度 difflib.SequenceMatcher 选择题 对于以下python代码表述错误的是? from difflib import SequenceMatcher myText1"我想学习Python做人工智能项目" myTex…

SpringCloud-Netflix学习笔记01——SpringCloud入门

一、SpringCloud是什么 Spring官网&#xff1a;https://spring.io/ SpringCloud, 基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注册与发现&#xff0c;配置中心&#xff0c;全链路监控&#xff0c;服务网关&#xff0c;负载均衡&#xff0c;熔断器等组件&#…

mybatis plus基本使用初体验02

1.常用注解 1.1 TableName注解 MyBatis-Plus在确定操作的表时&#xff0c;由BaseMapper的泛型决定&#xff0c;即实体类型决定&#xff0c;且默认操作的表名和实体类型的类名一致。若实体类类型的类名和要操作的表的表名不一致&#xff0c;会出现什么问题&#xff1f; 将数据…

力扣sql基础篇(八)

力扣sql基础篇(八) 1 大满贯数量 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Championship的数字代表的就是赢得比赛的球员的id,可以使用行转列(UNION all) #如果涉及到分组函数,建议还是不要写除了分组字段外的其他字段,因为不太符合标准sql …

正则化:五重境界理解减少过拟合的神器

本文来自公众号“AI大道理” 正则化作为减少过拟合的手段被大量的使用&#xff0c;那么为什么会出现过拟合呢&#xff1f;正则化又是什么&#xff1f;是怎么样发挥作用的呢&#xff1f; 1、过拟合是什么&#xff1f; 过拟合是指模型在训练集上取得很高的识别性能&#xff0c…

Ubuntu 22.04配置静态IP地址

1、查看ip地址网卡名称&#xff1a;ifconfig 2、编辑网卡配置文件&#xff1a;sudo vim /etc/netplan/01-network-manager-all.yaml 默认样式&#xff1a; network: version: 2 renderer: NetworkManager 3、修改为&#xff1a; network: ethernets: enp7s0: dhcp4: no dhcp6: …

【Kotlin】集合操作 ① ( List 创建与元素获取 | 安全获取集合元素 | getOrElse | getOrNull )

文章目录一、List 创建与元素获取二、安全获取集合元素1、getOrElse 函数2、getOrNull函数三、List 创建与元素获取代码示例一、List 创建与元素获取 Kotlin 中的集合分为两类 , 只读集合 和 可变集合 ; 调用 listOf 函数 , 可以 直接创建 List 集合 ; 通过 [] 下标可以 直接获…

Spring系列 容器

创建容器 方式一&#xff1a;类路径加载配置文件&#xff1a; ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml"); 方式二&#xff1a;文件路径加载配置文件&#xff08;用绝对路径&#xff09;&#xff1a; ApplicationConte…

闲话统信UOS

这周统信UOS正式在官网发布了22.0镜像统信UOS家庭版官网-正版国产操作系统--统信软件 (uniontech.com) 支持双系统&#xff1a;不影响原有系统使用&#xff0c;更换系统不担心电脑资料丢失&#xff1b; 官方应用商店&#xff1a;无病毒、放心安全下载&#xff0c;工作学习无打…

[C/Linux练习]进度条小程序

前置知识点 \n\r \n 换行&#xff0c;但只是垂直向下&#xff0c;并不水平移动。 \r 回车&#xff0c;返回当前行的头部。 光标返回头部后再打印&#xff0c;会从头开始覆盖之前打印在该行的内容。 printf的\n默认解释成换行回车。 光标是与显示器匹配的&#xff0c;光标在哪…

基于PHP的宠物社会化小程序

摘要随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Java集合面试题

集合容器概述 什么是集合 集合框架&#xff1a;用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容&#xff1a;对外的接口、接口的实现和对集合运算的算法。 接口&#xff1a;表示集合的抽象数据类型。接口…

AlexNet,VGG,NiN,GoogleNet,批量归一化

学着学着突然发现&#xff0c;数据分析numpy&#xff0c;matplotlib&#xff0c;pandas这一部分内容没学完&#xff0c;还有pytorch的一些代码没有学完&#xff0c;所以在看像AlexNet这一些代码实现的时候&#xff0c;很多都看不懂&#xff0c;也得慢慢的补上来了hhh。这一周花…

Ajax的学习笔记(包括原生的ajax,jquery,axios,fetch)

一、什么是ajax AJAX 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。 二、ajxa的创建使…

【尚硅谷】Java数据结构与算法笔记10 - 树结构的基础部分

文章目录一、二叉树1.1 为什么需要树结构1.1.1 数组存储方式的分析1.1.2 链式存储方式的分析1.1.3 树存储方式的分析1.2 树示意图1.3 二叉树的概念1.4 二叉树 - 遍历节点1.5 二叉树 - 查找指定节点1.6 二叉树 - 删除节点二、顺序存储二叉树2.1 顺序存储二叉树的概念2.2 顺序存储…

过气明星组合大衣哥、李嘉明、唐磊,谁录制祝福视频能价值100万

有人说大衣哥、李嘉明和唐磊&#xff0c;都属于过气的明星&#xff0c;只能说仁者见仁&#xff0c;智者见智了&#xff0c;毕竟每个人对事情的的看法不同&#xff0c;得到的结论也不会一样。大衣哥是农民歌唱家&#xff0c;本来就是泥腿子出身&#xff0c;就算有人气流量也不懂…

Ai检测人员穿衣规范系统 opencv

Ai检测人员穿衣规范系统可以通过opencvyolo深度学习技术对现场画面中人员穿衣自动检测&#xff0c;发现现场人员未正确按要求穿衣进行抓拍留档。OpenCV可以在不同的系统平台上使用&#xff0c;包括Windows&#xff0c;Linux&#xff0c;OS&#xff0c;X&#xff0c;Android和iO…

【数据安全】一起聊聊数据安全

信息安全的本质就是保护数据被合法地使用&#xff0c;或者一句话“让对的人看到对的数据&#xff01;”。 近来各种各样的安全名词满天飞&#xff0c;什么信息安全、网络安全、应用安全、数据安全、物联网安全、AI安全… 相应的法律、标准、资质、认证、安全方向产品、创业公司…