多行数据,每行为一个数字串。
保证数字串的总长度不超过1000,每行数据的答案至少有1个且不超过1000个。
多行数据,每行对应输出通过数字串破译得到的所有字符串,并按照字符串顺序排列,字符串之间用单个空格分隔。每行开头和结尾不允许有多余的空格。
1 12 123
a ab l abc aw lc
while True:
try:
ss = input()
def dfs(ss,tmp,ts,ans):
if not ss:
ans.append(ts)
return ans
for i in range(1,3):
if len(ss)-i>=0:
tmp = ss[0:i]
if int(tmp)<=26 and int(tmp)>0 and tmp[0]!='0' :
ts= ts+'*'+tmp
dfs(ss[i:],tmp,ts,ans)
ts = ts[:-2]
return ans
ans = dfs(ss,'','',[])
last =[]
for d in ans:
s = d.replace('*',' ').strip()
nums = s.split()
res = []
for i in range(len(nums)):
res.append(chr(int(nums[i])-1+ord('a')))
last.append(res)
ans =[]
for d in last:
ans.append(''.join(d))
print(' '.join(ans))
except:
break def func(nn, res, lst): if len(nn) == 0: if res not in lst: lst.append(res) return for i in range(len(nn)): if nn[i] == "1" and i+1 < len(nn): if nn[i+1] == "0": func(nn[i+2:], res+num_to_char(nn[i:i+2]), lst) return else: if i+2 < len(nn) and nn[i+2] == "0": func(nn[i+1:], res+num_to_char(nn[i]), lst) return else: func(nn[i+1:], res+num_to_char(nn[i]), lst) func(nn[i+2:], res+num_to_char(nn[i:i+2]), lst) return elif nn[i] == "2" and i+1<len(nn) and int(nn[i+1]) <= 6: if nn[i+1] == "0": func(nn[i+2:], res+num_to_char(nn[i:i+2]), lst) return else: if i+2<len(nn) and nn[i+2] == "0": func(nn[i+1:], res+num_to_char(nn[i]), lst) return else: func(nn[i+1:], res+num_to_char(nn[i]), lst) func(nn[i+2:], res+num_to_char(nn[i:i+2]), lst) return else: res += num_to_char(nn[i]) if res not in lst: lst.append(res) def num_to_char(num_str): return chr(int(num_str) + 96) while True: try: nn = input() res = "" lst = [] func(nn, res, lst) lst.sort() for per_str in lst: print(per_str, end=" ") print() except: break
""""
递归求解,一种变式DFS
对存在'0'的情况特殊处理
"""
import sys
def dfs(s, temp, ans):
if not s:
ans.append(''.join(temp))
return
if (len(s) >= 2 and s[1] != '0') or len(s) == 1:
dfs(s[1:], temp + (chr(int(s[0]) + ord('a') - 1),), ans)
if (len(s) >= 3 and s[2] != '0' or len(s) == 2) and int(s[:2]) <= 26:
dfs(s[2:], temp + (chr(int(s[:2]) + ord('a') - 1),), ans)
if __name__ == "__main__":
for line in sys.stdin:
s = line.strip()
ans = []
dfs(s, tuple(), ans)
print(' '.join(ans))