Leetcode #1012 至少有 1 位重复的数字

39 篇文章 0 订阅
7 篇文章 0 订阅

解题思路:可以尝试使用dfsdp算法

第一次通过使用的代码:

import numpy 
class Solution(object):
    def numDupDigitsAtMostN(self,N):
        """
        :type N: int
        :rtype: int
        """
        dig=1
        num=0
        inter=N
        point=[]
        while inter//10!=0:
            dig+=1
            point.append(inter%10)
            inter=inter//10
        point.append(inter%10)

        if dig!=1:
            for i in range(dig-2):                
                num+=9*fac(9,i+1)
            n=0
            num+=9
       

            num+=(point[dig-1]-1)*fac(9,dig-1)
           
                
            for i in range(2,dig+1):
                m=0
                inter=0
                for j in range(1,i):                    
                    if point[dig-j]<point[dig-i]:
                        m+=1
                    if point[dig-j]==point[dig-i]:
                        inter=1
                if  n==0:
                    num+=(point[dig-i]-m)*fac(10-i,dig-i)
  
                if inter==1:
                    n=1

            if n==0:
                for i in range(dig):
                    for j in range(i):
                        if point[j]==point[i]:
                            n=1

            if n==0:
                num+=1

        if dig==1:
            num=N
            
        return N-num

def fac(maxm,dig):
    fact=1
    for i in range(dig):
        fact=fact*(maxm-i)
    if dig==0:
        fact=1
    return fact
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值