小米春招编程题(第3题)

题目描述:

1表示a、2表示b、3表示c …… 26表示z,要求输入一串数字,输出所有可能表示的字符串

样例输入:

1212

样例输出:

abab abl aub lab ll

样例输入:

1234

样例输出:

abcd awd lcd

题目分析:

如下图,利用DFS,遍历二叉树,剪枝条件:数字不能大于26

 

# -*- coding:utf-8 -*-
class Fun:
    def __init__(self):
        self.flag=0
        self.list=[]#声明一个list模仿栈

    def fun(self,string):
        self.fun_1(string)
        self.fun_2(string)
        #回溯,出栈
        if len(self.list):
            self.list.pop()
    #获取一个数字
    def fun_1(self,string):
        #遍历完成输出
        if len(string) == 0:
            print ''.join(self.list),
            return
        else:
            #输入的数要大于0
            if int(string[0])>0:
                self.list.append(chr(int(string[0]) + 96))
                return self.fun(string[1:])
            else:
                return
    #获取两个数字
    def fun_2(self,string):
        #数字长度小于2,返回
        if len(string) <= 1:
            return
        else:
            if int(string[0:2]) > 26:
                return
            else:
                self.list.append(chr(int(string[0:2]) + 96))
                return self.fun(string[2:])


string=raw_input()
f=Fun()
f.fun(string)

 

posted @ 2018-04-12 10:24  ybf&yyj  阅读(286)  评论(0编辑  收藏  举报