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

实现逻辑:

1,使用队列的数据类型,每一轮更新一次可能出现的情况;

2,每次加入新的字符,就可能出现1-2种结果类型;

3,核心其实还是遍历了所有可能出现的结果;

说明:

现在网上搜索的代码都是只能显示有多少种可能的,几乎没有这些可能的具体结果

难点&遇到困难:

当初设计这个算法的时候,其实整体的逻辑流程都是没有问题的。但是,由于使用了浅拷贝所以导致了程序的结果总是有问题。

不过,还好后来检查中间流程的时候发现的算法错误的原因出现在拷贝的这个地方。

以前的错误形式(浅拷贝):d_mid和d1的指针指向同一个内存空间,共享相同的数据

d_mid = d1[j]

正确的形式(深拷贝):d_mid 重新获取系统内存存储和d1[ j ]相同的数据

d_mid = d1[j].copy()

实现代码:

 d0 = input()
 d1 = [[d0[0]]]  # 初始化

 # 对原始数据进行穷举

     num = len(d1)
     for j in range(num - 1, -1, -1):  # d1
         d_mid = d1[j].copy()
         d_mid.append(i)
         if len(d1[j][-1]) == 2 and int(i) != 0:  # 前一个是二位数,并且当前数不为0
             d1.append(d_mid)  # 一位数 直接加入后面
             del d1[j]

         elif len(d1[j][-1]) == 1 and int(i) != 0:  # 前面是一个一位数,并且当前数不为0
             d1.append(d_mid)  # 一位数直接加入后面
             str_mid = d1[j][-1] + i  # 当前二位数
             if int(str_mid) <= 26:
                 d1.append(d1[j].copy())  # 转变成二位数
                 d1[-1][-1] = str_mid
             del d1[j]

         elif len(d1[j][-1]) == 1 and int(i) == 0:   # 前面是一个一位数,并且当前数为0
             str_mid = d1[j][-1] + i  # 当前二位数
             if int(str_mid) <= 26:
                 d1.append(d1[j].copy())  # 转变成二位数
                 d1[-1][-1] = str_mid
             del d1[j]

     # print(d1)

 # 对d1中的所有可能性进行输出
 for i in d1:
     d2 = ''
     for j in i:
         d2 += chr(int(j) + 64)
     print(d2)

 print(len(d1))

输入例子1:

1345456

输出例子1:

MDEDEF
ACDEDEF
2

参考地址:

DP----解码,输出多少种译码结果

使用以下映射将包含A-ZIS的字母的消息编码为数字:'A' - > 1,'B' - > 2 ...'Z' - > 26 给定包含数字的编码消息,确定解码方式的总数(python)(原创)的更多相关文章

  1. mysql忘记密码的处理方式(整理非原创)

    方案1.通过跳过授权的方式 1.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的中加上:skip-grant-tables . 2.重新启动mysqld # ubun ...

  2. 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10的100次幂。 输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。 输入样例: 1234567890987654321123456789 输出样例: yi san wu

    这是PAT中的一道练习题 刚开始的时候我想着直接定义正整数n,结果走了很大的弯路,因为题目中要求n小于10的100次幂,即最大的正整数n有100位,而C语言中整型数字最大占8个字节的存储空间,如果按无 ...

  3. 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)

    背景: 电话面试&手撕代码 2019.03.22 Mufasa 问题: 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字 条件: 这串数字是有序数 解决方法: 核心代码只有 ...

  4. Java使用JNA方式调用DLL(动态链接库)(原创,装载请注明出处)

    Java使用JNA调用DLL 1.准备 1.JDK环境 2.Eclipse 3.JNA包 下载JNA包: (1).JNA的Github:https://github.com/java-native-a ...

  5. 常用的user32说明

    函数名称 说明 ActiveKeyboardLayout 激活一个不同的键盘布局,该布局必须先由LoadKeyBoardLayout函数装载AdjustWindowRect 根据希望的用户矩形大小来计 ...

  6. [Swift]LeetCode91. 解码方法 | Decode Ways

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  7. LeetCode第[91]题(Java):Decode Ways(解码方法数)

    题目:解码方法数 难度:Medium 题目内容: A message containing letters from A-Z is being encoded to numbers using the ...

  8. Python3中文教程

    搜索 此文档来源自网络 安装 PYTHON❝ Tempora mutantur nos et mutamur in illis. (时光流转,吾等亦随之而变.) ❞ — 古罗马谚语 深入欢迎来到 Py ...

  9. Linux常用命令详解—基于CentOS7

    ## Linux 目录- /:根目录,一般只存放目录,不存放文件- /bin -> /usr/bin:可执行二进制文件的目录,也是常用命令目录,如常用的命令 ls.cat.mv 等- /boot ...

随机推荐

  1. 桌面小部件Wight父类AppWidgetProvider的三个方法

    onUpdate()这个方法会在每次更新App Widget的时候调用,数据更新的逻辑都写在这个方法里边.而且要注意的是:在用户添加小部件的时候,会首先调用这个方法,应该在这个方法里进行初始化操作,比 ...

  2. PID25 / 合并果子 ☆

    这里用到了STL里面的priority_queue,我也不是很精通基本上属于现学现卖阶段,http://www.cnblogs.com/flyoung2008/articles/2136485.htm ...

  3. lock(this)

    public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } 网上答案说和参数有关.可是我把int  改成ob ...

  4. json解析Object

    最近的工作是在数据库使用myBaties查出的数据没有实体, 比如: <select id="allTree" parameterType="String" ...

  5. Vue history模式支持ie9

    vue 路由里面的history能让浏览器显示平常一样的链接,可以去掉#这种,但是在ie9下面会强制变成hash,因为history不支持ie9自动降级,可能就会影响美感,解决:可以在路由里面添加fa ...

  6. vuex的mutations传值

    mutations是要通过方法触发的,用于更改store里的数据的.this.$store.commit("mutationsName") 例子: store.js import ...

  7. VS2017 Debug断点后显示UTF8字符串

    断点后跟踪字幕文件文本,因为国内字幕一般是UTF8的,VS默认显示不出来,在变量上双击,加入 ,s8就可以了 默认 修改后 其他 ,数字  将变量拆分为数组显示, 数字是要显示多少位, 此法对cons ...

  8. X86给龙芯笔记本编译本地工具链(未完待续)

    我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...

  9. [swarthmore cs75] inlab1 — Tiny Compiler

    课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了inlab1的实践过程. tiny compiler 这个迷你的编译器可以将一个源文件,编译成可执行的二进制代码. ...

  10. Python 字符串十六进制流

    字符串转十六进制绕过特征检测SQL注入 Python中内置库与出色第三方库的学习 # 字符串转十六进制 mystr = "hello world" print(":&qu ...