用1234这四个数字组合成8位数,里面只有1到2个数的组合有多少组,比如11111111这是1个数的组合,11111112,11111113,11111114这是2个数的组合,需要把只有1到2个数的组合统计然后列出来。
一共1528个
https://www.aliyundrive.com/s/m1giuANCszH
从11111111到44444444全部组合:https://www.aliyundrive.com/s/KqKUswnivy5
至少包含1234各一次的全部组合:https://www.aliyundrive.com/s/qeAwT31K5xu
def arr(str):
if(len(str)==8):
return
for i in ['1','2','3','4']:
str1=str+i
arr(str1)
if(len(str1)==8):
with open("data.csv",'a') as f:
f.write(str1+'\n')
def main():
str=''
arr(str)
main()
有用点个采纳
# 数字不多, 用回溯可解
import copy
class Solution:
def cutBigThanTwo(self, numsList): # 去除其中大于两个数字的
# 将列表转换为set, 集合不包含重复值, 可用于查看时候有超过2的
resultNoMoreThanTwoNum = []
for each in numsList:
if len(set(each)) <= 2:
resultNoMoreThanTwoNum.append(each)
return resultNoMoreThanTwoNum
def backTracking(self, nums, temp): # temp存放一次的结果
if len(temp) == 8:
self.result.append(copy.deepcopy(temp)) # 存放结果
return
for i in range(len(nums)):
temp.append(nums[i])
self.backTracking(nums, temp)
temp.pop() # 回溯
def getResult(self, nums): # nums = [1, 2, 3, 4]
self.result = []
self.backTracking(nums, [])
return self.cutBigThanTwo(self.result)
x = Solution()
print(x.getResult([1, 2, 3, 4]))