麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

357. Count Numbers with Unique Digits -Medium

2019-11-11 05:12:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Question

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

給出一個(gè)非負(fù)整數(shù)n,在 0 <= x <10 ^n 的范圍內(nèi),統(tǒng)計(jì)每一位都不重復(fù)的數(shù)字的個(gè)數(shù)

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])

Solution

想到的第一種方法是回溯,在個(gè)位數(shù)遍歷1 - 9,在其他位數(shù)上遍歷0-9(當(dāng)然要注意已使用過(guò)的數(shù)字不能再使用),終止條件為當(dāng)前的數(shù)字大于最大的數(shù)字(10 ^ n)

class Solution(object): def countNumbersWithUniqueDigits(self, n): """ :type n: int :rtype: int """ count = 1 # 因?yàn)閭€(gè)位數(shù)不能有0,所以個(gè)位數(shù)的循環(huán)放到回溯外面,分別統(tǒng)計(jì)一次個(gè)位數(shù)為 1 - 9 的元素不重復(fù)數(shù)字個(gè)數(shù) for i in range(1, 10): selectable = list(range(10)) selectable.remove(i) count += self.solve(list(range(2, 10)), pow(10, n), i) return count def solve(self, selectable, max_num, current_num): count = 0 # 只要小于最大數(shù)字,都保存統(tǒng)計(jì),否則返回 if current_num < max_num: count += 1 else: return count # 遍歷 0 - 9 數(shù)字 for index_s, s in enumerate(selectable): count += self.solve(selectable[:index_s] + selectable[index_s + 1:], max_num, current_num * 10 + s) return count

不過(guò)得到了 Time Limit Exceeded

第二種方法是動(dòng)態(tài)規(guī)劃。

位數(shù) 不重復(fù)元素個(gè)數(shù) 總數(shù)
1 10 10
2 9 * 9 91
3 9 * 9 * 8 739
4 9 * 9 * 8 * 7 986410

考慮以上規(guī)律,我們只需保存兩個(gè)變量,一個(gè)是上一個(gè)位數(shù)的不重復(fù)元素個(gè)數(shù)dp,另一個(gè)是可選數(shù)字個(gè)數(shù)selectable,這樣我們就可以得到遞推式 dp = dp * selectable,同時(shí)我們額外在維護(hù)一個(gè)總數(shù)就可以了

class Solution(object): def countNumbersWithUniqueDigits(self, n): """ :type n: int :rtype: int """ if n == 0: return 1 selectable = 9 # 當(dāng)前可選項(xiàng)個(gè)數(shù) dp = 9 # 保存當(dāng)前位數(shù)的元素不重復(fù)數(shù)字個(gè)數(shù)(不包括個(gè)位數(shù)) res = 10 # 元素不重復(fù)數(shù)字的總個(gè)數(shù) # 個(gè)位數(shù)的情況已經(jīng)統(tǒng)計(jì)完成了,所以只需要統(tǒng)計(jì)n - 1次 for _ in range(n - 1): if selectable > 0: dp = dp * selectable res += dp selectable -= 1 return res
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久电影网站 | xxxxhd73国产 | 日本精品一区二区 | av在线久草 | 精品国产一区二区三区蜜殿 | 茄子福利视频 | 91久久一区 | 羞羞视频免费视频欧美 | 婷婷中文字幕一区二区三区 | 久久精品2019中文字幕 | 色啪综合 | 午夜视频中文字幕 | 精品亚洲成a人在线观看 | av色在线观看 | 日韩色电影 | 欧美成人精品一区二区 | 香蕉在线看 | 国产一有一级毛片视频 | 色淫网站免费视频 | 欧美1区2区 | 免费观看一级黄色片 | 国产成人精品区 | 成人在线精品视频 | 素人视频免费观看 | 92自拍视频 | 久久777国产线看观看精品 | 羞羞视频一区 | 色域tv | www国产成人免费观看视频,深夜成人网 | 日本精品久久久一区二区三区 | 国产乱淫a∨片免费观看 | 久久成人福利 | 久久免费视频一区二区三区 | 免费日韩片| 羞羞羞羞视频 | 爱逼爱操综合网 | 国产一级毛片视频在线! | 久久精品国产99国产精品澳门 | av噜噜在线 | 一级黄色淫片 | 毛片在线视频观看 |