首页 > 其他分享 >动态规划一>解码方法

动态规划一>解码方法

时间:2024-10-09 20:21:10浏览次数:8  
标签:位置 int 解码 填表 ss 动态 规划 dp

1.题目: . - 力扣(LeetCode)

  

2.解析:

版本一:图解:

注意:

前导0不能解码:06,

或者两个数字字符:其中一个解码失败,整个也解码失败

 

/**
    1.创建dp表
    2.初始化
    3.填表
    4.返回
     */
    public int numDecodings(String ss) {
       int n = ss.length();
       int[] dp = new int[n];
       char[] s = ss.toCharArray();

       //初始化第一个位置
       if(s[0] != '0') dp[0] = 1;
       if(n == 1) return dp[0];//边界情况,只有一位字符时,放置后续越界


       /**
       初始化第二个位置:
       情况一:dp[0],和dp[1]任意一个都可以解码

       情况二:dp[0] 和 dp[1]两个可以一起解码
        */
       if(s[0] != '0' && s[1] != '0') dp[1] += 1;

       int t = (s[0] - '0')*10 + (s[1] - '0');
       if(t >= 10 && t <= 26) dp[1] += 1;

       //3.填表
       for(int i = 2; i < n; i++){

        //第一种情况:
        if(s[i] != '0') dp[i] += dp[i-1];

        //情况二:i前面的以及i搜可以编码:
        int tt = (s[i-1] - '0')*10 + (s[i] - '0');
        if(tt >= 10 && tt <= 26)  dp[i] += dp[i-2];
       }

       return dp[n-1];
    }

优化版本:多加一个位置,可以原字符串1位置的值,在填表时候久初始化好

注意:

1.下标映射位置多加了一个位置判断是否解码,时注意减一

2.虚拟节点位置的元素dp[0]=1来保证,原字符1位置填表时正确

dp[0]=1的原因:再填表时0和1位置是解码成功的状态所有dp[0]=1 

 

 

 public int numDecodings(String ss) {
        int n = ss.length();
       int[] dp = new int[n+1];
       char[] s = ss.toCharArray();

       dp[0] = 1;//保证后续填表是正确的

       //初始化第一个位置
       if(s[1-1] != '0') dp[1] = 1;

       //3.填表
       for(int i = 2; i <= n; i++){

        //第一种情况:
        if(s[i-1] != '0') dp[i] += dp[i-1];

        //情况二:i前面的以及i位置都可以编码:
        int tt = (s[i-2] - '0')*10 + (s[i-1] - '0');
        if(tt >= 10 && tt <= 26)  dp[i] += dp[i-2];
       }

       return dp[n];
    }

标签:位置,int,解码,填表,ss,动态,规划,dp
From: https://blog.csdn.net/robin_suli/article/details/142795582

相关文章

  • 探究AudioPolicyManager.cpp中的成员变量mAvailableOutputDevices/InputDevices是根据
    2024-09-2310:29:48.792286-445APM-AudioPolicyEnginepid-286Wframeworks/av/services/audiopolicy/enginedefault/src/Engine.cpp:getDeviceForStrategyInt:2782024-09-2310:29:48.792286-445AudioFlingerpid......
  • 无人机集群路径规划:5种优化算法(APO、GOOSE、CO、PSO、PIO)求解无人机集群路径规划,提供M
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • 探讨微服务治理场景中,Sermant Backend如何管理插件动态配置
    本文分享自华为云社区《SermantBackend配置管理功能在微服务治理场景中的应用》,作者:华为云开源。一、背景Sermant是基于Java字节码增强技术的无代理服务网格,业务应用通过JavaAgent的方式将Sermant挂载至目标进程中。其中动态配置是Sermant框架中的关键能力,它能够在微服务挂载Se......
  • 产品战略规划实战暨工信部教考中心产品战略规划能力
     通过此次课程培训,可使学习者获得如下收益:   掌握华为BLM业务领先模型;运用双差分析并找出根因;掌握确定战略意图方法;运用五看方法论进行高质量市场洞察;运用竞争取舍线工具展开高质量的竞争;运用SPAN模型和综合指数法筛选优质机会;熟练运用10种创新策略......
  • (LeetCode 热题 100) 1143. 最长公共子序列(动态规划dp)
    题目:1143.最长公共子序列思路:经典动态规划dp题型,时间复杂度为0(n^2)。C++版本:classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){intn=text1.size(),m=text2.size();//状态f[i][j]表示:text1[0,i]和text2[0......
  • 【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路
    操作环境:MATLAB2022a1、算法描述孔雀优化算法(PeafowlOptimizationAlgorithm,简称POA)以孔雀(peafowl)的求偶展示行为为灵感,通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化算法的详细描述:孔雀优化算法是一种基于自然界中孔雀求偶展示行为的群体智能优化算法。孔雀......
  • 【javascript 编程】Web前端之JavaScript动态添加类名的两种方法、区别、className、c
    通过className来添加或删除类名添加类名获取元素el.className="类名1类名2...";多个类名用空格隔开。移除类名获取元素名el.className="";直接等于一个空字符串即可删除类名。通过classList来添加或删除类名添加一个类名获取元素名el.classList.add("类名");。......
  • java计算机毕业设计博恒人力资源规划系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今竞争激烈的商业环境中,企业的人力资源管理成为决定其成败的关键因素之一。随着信息技术的飞速发展,传统的人力资源管理方式已难以满足现代企业的......
  • 动态规划法
    算法导论这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是Introductiontoalgorithms-3rd(ThomasH.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是Algorithmsdesi......
  • 状态压缩的动态规划
    以洛谷无向图求环问题为例#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineregregisterintintn,m;inta[19][19];llf[1<<19][19];llres=0;intmain(){cin>>n>>m;for(inti=1;i<=m;i++){intj,......