嵌套函数不运行的原因?
链接:https://www. 来源:牛客网问题:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
(1)下边是我自己写的dfs程序,但是调试的时候发现进不去dfs这个函数,请问这是什么原因? 怎么修改才能全部运行通过?
(2)如果程序中“global step”不写globle,那么step会不传到dfs中作为参数呢? 我如果不写global,运行程序时就会出现:局部变量step只是被声明但没有被应用,这是为什么?
class Solution:
def Permutation(self, ss): #Permutation=全排列函数;ss=字符串
n = len(ss)
box = [0] * n #n个盒子,用来放可能的字母(全局变量)
book =[0] * n #book记录字母有没有放入盒子中,放入则记为1,没放入时记为0 (全局变量)
global step
step = 1
def dfs(step): #内嵌函数dfs
#global step
#递归结束条件:当step大于n,即走到了第n+1个盒子面前时手中没有字母了
if step > n:
for j in range(n):
print({0}.format(box[j]),end='')
print('\n')
return
for i in range(n): #放出每一个字母
if book[i] == 0 : #book[i]=0表示字母在手上
box[step] = ss[i] #ss序列中的字母[i]放入盒子box[]中
book[i] = 1 #[i]号字母放入盒子中,记为1
#第step个盒子放好字母后,然后走到下一个盒子面前
dfs(step+1) #递归
book[i] = 0 #将刚才的字母收回
return
ss = ['a','b','c']
result = Solution()
result.Permutation(ss)