AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

LeetCode 357. 计算各个位数不同的数字个数    原题链接    中等

作者: 作者的头像   bruce ,  2021-02-23 20:07:00 ,  阅读 12


0


/**
 * 方法 1,根据通项公式,然后f(n) = 9 * (11 - i), i = 2, 3, 4, 5...找出除各个位上数字不相同的数字总和
 * 推荐做法
 * 如果n是0的话,那么只有1种,否则
 * 一位数的满足要求的数字是10个(0到9);
 * 二位数的满足题意的是81个,[10 - 99]90个数字中去掉[11, 22, 33, 44, 55, 66, 77, 88, 99]这9个数字,所以还剩81个
 * 通项公式,然后f(n) = 9 * (11 - i)
*/
int countNumbersWithUniqueDigits(int n)
{
    if (n == 0)
        return 1;
    int res = 10, cnt = 9; // res 是一位数的结果10,然后i从2开始,res累加从2位数开始
    for (int i = 2; i <= n; ++i)
    {
        cnt *= (11 - i); // 两位数的时候使用递推公式来写
        res += cnt;      // 最后res累加即可返回
    }
    return res;
}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息