【LeetCode】357 計算各個位數不同的數字個數 (C++)
阿新 • • 發佈:2018-12-21
題目描述:
給定一個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 ≤ x < 10n 。
示例:
輸入: 2 輸出: 91 解釋: 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 區間內的所有數字。
解題方案:
開始一直想著動態規劃的狀態轉移方程,結果想得太複雜了,實際上用排列組合還是很簡單的...【自閉了
然後我考慮的n>10的情況,答案沒有,可能預設不計算那種吧,不過寫上還是應該沒什麼問題的...
當n>=2時,第一位有9種可能,第二位9種,第三位8種...以此類推
程式碼:
class Solution { public: int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; if(n==1) return 10; int result=10; int f=9; for (int i = 2; i <= n; ++i) { //從f(2)開始計算,然後累加即可 f*=(10-i+1); result += f; } return result; } };