【回溯-数字全排列&&dfs】leet 357. 统计各位数字都不同的数字个数

给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n示例 1:

输入:n = 2
输出:91
解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。 

示例 2:

输入:n = 0
输出:1

提示:

  • 0 <= n <= 8

其实就是统计长度为n,由【0,9】的数字构成的字符串的全排列个数,但是000这种也算是合理的数字。所以和全排列又有不同。

在选择数字的时候允许出现前缀0.

static class Solution {
    public int count=0;
    public int countNumbersWithUniqueDigits(int n) {
        dfs(0,n,new boolean[10],0);
        return count;
    }

    public void dfs(int i,int n,boolean[] u,int v){
        if(i==n){
            count++;
            return;
        }
        for(int d=0;d<=9;d++){
            if(v!=0&&u[d]) continue;  
			//如果不是前缀0,并且d在前面出现过,不被允许。如果是前缀0,则d可以随意选择
            u[d] = true;
            dfs(i+1,n,u,v*10+d);
            u[d]=false;
        }
    }

}

}

算法笔试题解-回溯系列 文章被收录于专栏

算法笔试题解-回溯系列

全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
学历算污点吗?
小何和:快毕业了,BOSS上的od闻着味就来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务