输出互不相同且无重复数字的三位数

输出互不相同且无重复数字的三位数
简化版:给定数字列表
解法一:


def threedata(nums):
    """
    三个不重复且互不相同的三位数
    params:
        nums->数字列表
    returns:
        num_set->三位数集合
        num_index->三哥数字在原列表下标集合
        num_len->三位数个数
    """
    num_set = list()
    num_index = list()
    for i in range(len(nums)):
        for j in range(len(nums)):
            for k in range(len(nums)):
                if i !=j and i!=k and j!=k:
                    num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
                    num_index.append((str(i)+str(j)+str(k)))
    num_len = len(num_set)
    return num_set,num_index,num_len

if __name__ == '__main__':
    nums = [1,2,3,4]
    num_set,num_index,num_len = threedata(nums)
    print(num_set)
    print(num_index)
    print(num_len)

解法二


```python
class train_1:
    """
    三个不重复且互不相同的三位数
    params:
        nums->数字列表
    returns:
        num_set->三位数集合
        num_index->三哥数字在原列表下标集合
        num_len->三位数个数
    """
    
    def __init__(self,nums):
        self.nums = nums
        
    def threedata(self):

        num_set = list()
        num_index = list()
        for i in range(len(nums)):
            for j in range(len(nums)):
                for k in range(len(nums)):
                    if i !=j and i!=k and j!=k:
                        num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
                        num_index.append((str(i)+str(j)+str(k)))
        num_len = len(num_set)
        return num_set,num_index,num_len

if __name__ == '__main__':
    nums = [1,2,3,4]
    train_3d = train_1(nums)
    num_set,num_index,num_len = train_3d.threedata()
    print(num_set)
    print(num_index)
    print(num_len)

解法三

class train_1:
    """
    三个不重复且互不相同的三位数
    params:
        nums->数字列表
    returns:
        num_set->三位数集合
        num_index->三哥数字在原列表下标集合
        num_len->三位数个数
    """
    
    def __init__(self,nums):
        self.nums = nums
        
    def threedata(self):
        #self.nums = set(self.nums)
        num_set = list()
        num_index = list()
        for i in range(len(nums)):
            for j in range(len(nums)):
                for k in range(len(nums)):
                    if nums[i] !=nums[j] and nums[i]!=nums[k] and nums[j]!=nums[k]:
                        num_set.append(int(str(nums[i])+str(nums[j])+str(nums[k])))
                        num_index.append((str(i)+str(j)+str(k)))
        num_len = len(num_set)
        return num_set,num_index,num_len

if __name__ == '__main__':
    nums = [1,2,2,1,4]
    num = list(set(nums))#如果列表中数字有重复,先去重生成新列表
    print(num)
    train_3d = train_1(num)
    num_set,num_index,num_len = train_3d.threedata()
    print(set(num_set))
    print(num_index)
    print(num_len)
解法四

```python
def exercises_001():
    '''
    另一种解法
    '''
    arr = []
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                num = 100*i+10*j+k
                if i!=j and j!=k and i!=k and num not in arr:# 互不相同且无重复数字的三位数
                    arr.append(num)
    print(len(arr),arr)

if __name__ == '__main__':
    exercises_001()

解法五

import itertools
def exercises_001_1(arr_list):
    '''
    其实python自带排列组合模块,可以直接调用。
    '''
    temp_arr = list(itertools.permutations(arr_list, 3)) # 排列  # A_4^3 = (4)!/(4-3)! = (4*3*2*1)/1 = 24
    print(temp_arr)
    arr = [100*t[0]+10*t[1]+t[2] for t in temp_arr]
    return arr
if __name__ == '__main__':
    arr_list=[1, 2, 3, 1]
    arr=exercises_001_1(arr_list)
    print(len(arr),arr)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值