【回溯-数字全排列&&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;
        }
    }

}

}

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

算法笔试题解-回溯系列

全部评论

相关推荐

08-27 16:55
门头沟学院 C++
面完了xhs的一面,感觉答的还可以,求过求过
Morpheus_:羡慕xhs大佬 可以分享一下面经吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-29 14:02
纠结的茶叶蛋在开会:太简单了,技术和业务没一个够用的,要么学业务,去搞erp或者his,要么专精技术,去搞架构
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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