【数位DP】【357. Count Numbers with Unique Digits】

来源:互联网 发布:北京知果科技有限公司 编辑:程序博客网 时间:2024/06/01 17:30

题目链接:https://leetcode.com/problems/count-numbers-with-unique-digits/#/description

class Solution {public:    int bit[15]={0};    //  保存最大值,999999...    int dp[15]={0};     //  符合要求的方案数    int a[10]={0};      //  标记每个数是否出现过    int countNumbersWithUniqueDigits(int n) {        if(n>=10) return 8877691;        return solve(n);    }    //  bit保存最大值,n=2,99    int solve(int n){        int pos=0;        while(n){            bit[++pos]=9;            n--;        }        return dfs(pos,true,true);    }    //  统计个数    int dfs(int len,bool isMax,bool isFirst){        if(len==0) return 1;        // if(!isMax&&dp[len]>=0) return dp[len];        int cnt=0;        int maxNum=9;        for(int i=0;i<=maxNum;i++){            if(a[i]) continue;            a[i]=1;            if(isFirst&&i==0) a[i]=0;            cnt+=dfs(len-1,i==maxNum,isFirst&&i==0);            a[i]=0;        }        if(!isMax) dp[len]=cnt;        return cnt;    }};