给你一个正整数 n ,开始时,它放在桌面上。在 $10^9$ 天内,每天都要执行下述步骤:
对于出现在桌面上的每个数字 x ,找出符合 1 <= i <= n 且满足 x % i == 1 的所有数字 i 。
然后,将这些数字放在桌面上。
返回在 $10^9$ 天之后,出现在桌面上的 不同 整数的数目。
注意:
- 一旦数字放在桌面上,则会一直保留直到结束。
- % 表示取余运算。例如,14 % 3 等于 2 。
Own Solution:
1 | class Solution(object): |
要注意的点是特殊判断的1。看了提示才做出来的^^。
官方解法1:模拟
用数组记录桌面上已经出现的正整数,num[n] = 1表示桌面上只出现正整数n。每天都对桌面上已经出现的数字进行遍历,判断符合条件放到桌面上既可(令数组中该标号的数字的值为1)。最后统计num中值为1的元素数目即可。(用sum就可以了)
1 | class Solution(object): |
但是时间复杂度到了O($n^3$),所以一开始想到这样判断但怕会超时就直接放弃了这种解法。
官方解法2:数学
根据题目的特殊性,10的9次方是很大的操作次数,所以可以默认一定可以将所有小于n的正整数(除了1)放到桌面上。所以除去1的特解,答案就是n-1。
1 | class Solution: |
评论区:搞笑题。(赞成
但也算是给了一个可以走捷径的思路吧,所以记下。