用 C++ 統計位數不同的數字
假設我們有一個非負整數 n。我們需要統計所有與 n 範圍內的數字 x 具有唯一位數的數字,其中 x 介於 0 到 10^n 之間。因此,如果 n 為 2,那麼結果將是 91,因為我們希望找到從 0 到 100 的且不含 11、22、33、44、55、66、77、88、99 的數字。
為了解決這個問題,我們將按照以下步驟執行 −
如果 n 為 0,則返回 1
n := min(10, n)
如果 n 為 1,則返回 10
ans := 9,ret := 10
對於範圍 2 到 n 的 i
ans := ans * (9 – i + 2)
ret := ret + ans
返回 ret
示例(C++)
讓我們來看一下以下實現,以更深入地理解 −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n == 0)return 1;
n = min(10, n);
if(n == 1)return 10;
int ans = 9;
int ret = 10;
for(int i = 2; i<= n; i++){
ans *= (9 - i + 2);
ret += ans;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.countNumbersWithUniqueDigits(3));
}輸入
3
輸出
739
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP