用 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
廣告