LeetCode 357. 计算各个位数不同的数字个数(DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 357. 计算各个位数不同的数字个数(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給定一個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 ≤ x < 10n。
示例: 輸入: 2 輸出: 91 解釋: 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 區間內的所有數字。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 動態規劃
| 0 | 1(0) |
| 1 | 10(0-9) |
| 2 | 91 |
dp[i]dp[i]dp[i] 表示 n = i 的時候有多少各位都不相同的數
那么 dp[i]dp[i]dp[i] 肯定需要加上 n = i-1 時的個數 dp[i?1]dp[i-1]dp[i?1]
那么從 i-1 位數,變成 i 位數,且各位不相同的數有多少?
首先 i-1 位的數有多少個? dp[i-1] - dp[i-2] 個
這 i-1 位數,組成 i 位數,且各個位都不一樣,可以添加的數的選擇有多少種?10-(i-1)
所以狀態轉移公式為:
dp[i]=dp[i?1]+(dp[i?1]?dp[i?2])?(10?(i?1))dp[i] = dp[i-1] + (dp[i-1]-dp[i-2])*(10-(i-1))dp[i]=dp[i?1]+(dp[i?1]?dp[i?2])?(10?(i?1))
總結
以上是生活随笔為你收集整理的LeetCode 357. 计算各个位数不同的数字个数(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 558. 四叉树交集(
- 下一篇: LeetCode 318. 最大单词长度