每日一题 统计桌面上的不同数字
给你一个正整数 n
,开始时,它放在桌面上。在 10^9
天内,每天都要执行下述步骤:
- 对于出现在桌面上的每个数字
x
,找出符合1 <= i <= n
且满足x % i == 1
的所有数字i
。 - 然后,将这些数字放在桌面上。
返回在 10^9
天之后,出现在桌面上的 不同 整数的数目。
解题思路
枚举法,直接用一个大小为n的数组table_list表示桌面上的是否出现(0,n)的数字,在执行步骤后根据数组table_list便可知道不同整数的数目
也可用数学推理直接秒杀
代码实现
枚举法
class Solution:
def distinctIntegers(self, n: int) -> int:
nums = [0] * (n + 1)
nums[n] = 1
for _ in range(0, n):
for x in range(1, n + 1):
if nums[x] == 0:
continue
for i in range(1, n + 1):
if x % i == 1:
nums[i] = 1
return sum(nums)
数学
class Solution:
def distinctIntegers(self, n: int) -> int:
return 1 if n == 1 else n-1
复杂度分析
枚举法时间O(n^3),空间O(n),数学时间空间都是O(1)