用1234这四个数字组合成8位数

用1234这四个数字组合成8位数,里面只有1到2个数的组合有多少组,比如11111111这是1个数的组合,11111112,11111113,11111114这是2个数的组合,需要把只有1到2个数的组合统计然后列出来。

一共1528个

img

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]))