題目
難度:★☆☆☆☆
類型:數(shù)學(xué)
我們稱一個(gè)數(shù) X 為好數(shù), 如果它的每位數(shù)字逐個(gè)地被旋轉(zhuǎn) 180 度后,我們?nèi)钥梢缘玫揭粋€(gè)有效的,且和 X 不同的數(shù)。要求每位數(shù)字都要被旋轉(zhuǎn)。
如果一個(gè)數(shù)的每位數(shù)字被旋轉(zhuǎn)以后仍然還是一個(gè)數(shù)字, 則這個(gè)數(shù)是有效的。0, 1, 和 8 被旋轉(zhuǎn)后仍然是它們自己;2 和 5 可以互相旋轉(zhuǎn)成對(duì)方;6 和 9 同理,除了這些以外其他的數(shù)字旋轉(zhuǎn)以后都不再是有效的數(shù)字。
現(xiàn)在我們有一個(gè)正整數(shù) N, 計(jì)算從 1 到 N 中有多少個(gè)數(shù) X 是好數(shù)?
注意
N 的取值范圍是 [1, 10000]。
示例
輸入: 10
輸出: 4
解釋:
在[1, 10]中有四個(gè)好數(shù): 2, 5, 6, 9。
注意 1 和 10 不是好數(shù), 因?yàn)樗麄冊(cè)谛D(zhuǎn)之后不變。
解答
這道題邏輯簡(jiǎn)單易懂,定義函數(shù),判斷一個(gè)數(shù)字是否是旋轉(zhuǎn)數(shù)字:
條件1:3,4,7不在數(shù)字中,因?yàn)檫@些數(shù)字旋轉(zhuǎn)后是沒有意義的;
條件2:2,5,6,9至少有一個(gè)在數(shù)字中,這樣才能保證旋轉(zhuǎn)后的數(shù)字與原數(shù)字不同。
然后計(jì)數(shù)范圍內(nèi)旋轉(zhuǎn)數(shù)字的個(gè)數(shù)。
class Solution:
def rotatedDigits(self, N):
is_rotate = lambda n: all([c not in n for c in {'3', '4', '7'}]) and any([c in n for c in {'2', '5', '6', '9'}])
return len(list(filter(is_rotate, map(str, range(N+1)))))
如有疑問或建議,歡迎評(píng)論區(qū)留言~