#题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
def nums():
nums = []
for i in range(1,5):
for j in range(1,5):
if j != i:
for k in range(1,5):
if k != i and k != j:
num = i*100 + j*10 + k
nums.append(num)
return nums
#连续数字,构建进制数,五进制
def digits():
digits = []
fives = [2,2,1]
for i in range(int('123',5),int('432',5)+1):
fives[0] += 1
for j in range(len(fives)):
flag = True
if fives[j] == 5:
fives[j] = 0
if j+1 == len(fives):
fives.append(0)
fives[j+1] += 1
flag = False
if flag: break
set1 = set(fives)
if len(fives) == len(set1) and (0 not in set1):
sum = 0
for i in range(-1,-len(fives)-1,-1):
sum = sum * 10 + fives[i]
digits.append(sum)
return digits
#延伸,若干个数组成若干位无重复数字
#字典,集合实现,递归即循环? 字典key记录组成的数字,value(用字典)记录剩余没有使用的数字,每一次循环构造新的k,v对
#{1:{2,3,4}, 2:{1,3,4},3:{1,2,4},4:{1,2,3}}
#{12:{3,4},13:{2,4},14:{2,4}}
def numbers(lst,num,dics = None):
if dics == None: dics = {0:set(lst)}
if num == 0: return [i for i in dics]
nums = {}
for k,v in dics.items():
for i in v:
if k == 0 and i ==0:
continue
nums.update({k*10+i:v-{i,}})
return numbers(lst,num-1,nums)
#不用递归,循环实现
def numsfor(lst,num):
dics = {0:set(lst)}
for i in range(num):
nums = {}
for k,v in dics.items():
for j in v:
if k == 0 and j == 0:
continue
nums.update({k*10+j:v-{j,}})
dics = nums
return [i for i in dics]