357. Count Numbers with Unique Digits

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])

思維大概就是如果n=3,那麼我就把 只有一個Digit的結果+只有兩個Digits的結果 + 只有三個Digits的結果 用遞迴方式實作


class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        
        if(n == 0) return 1; // 0
        if(n == 1) return 10; // 0,1,2,3,4,5,6,7,8,9
 
        int count = 9; // 最高位數
        for (int index = 1; index < n; index++)
            count = count*(9-index+1); // 9減去上個位數被選的一個數字再加上 0這個數字

        return count + countNumbersWithUniqueDigits(n-1);
    }
};

        int count = 9;  <span style="font-family: Arial, Helvetica, sans-serif;">// 最高位數</span>

        for (int index = 1; index < n; index++)  
            count = count*(9-index+1); <span style="font-family: Arial, Helvetica, sans-serif;">// 9減去上個位數被選的一個數字再加上 0這個數字</span>

上面這段就是:

n = 2 時(就是數字 XX 的時候),十位數有9個選擇(1,2,3,4,5,6,7,8,9),個位數字只剩9(1,2,3,4,5,6,7,9,0)個選擇(假設十位數選了 8)

n= 3 時(就是數字 XX X的時候),百位數有9個選擇(1,2,3,4,5,6,7,8,9),十位數有9個選擇(1,2,3,4,5,6,7,9,0) ,個位數字只剩8個選擇



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值