统计桌面上的不同数字

给你一个正整数 n ,开始时,它放在桌面上。在 109 天内,每天都要执行下述步骤:

对于出现在桌面上的每个数字 x ,找出符合 1 <= i <= n 且满足 x % i == 1 的所有数字 i 。
然后,将这些数字放在桌面上。
返回在 109 天之后,出现在桌面上的 不同 整数的数目。

注意:

一旦数字放在桌面上,则会一直保留直到结束。
% 表示取余运算。例如,14 % 3 等于 2 。

示例 1:

输入:n = 5
输出:4
解释:最开始,5 在桌面上。
第二天,2 和 4 也出现在桌面上,因为 5 % 2 == 1 且 5 % 4 == 1 。
再过一天 3 也出现在桌面上,因为 4 % 3 == 1 。
在十亿天结束时,桌面上的不同数字有 2 、3 、4 、5 。
示例 2:

输入:n = 3
输出:2
解释:
因为 3 % 2 == 1 ,2 也出现在桌面上。
在十亿天结束时,桌面上的不同数字只有两个:2 和 3 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-distinct-numbers-on-board
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int distinctIntegers(int n) {
        int count = 0;
        //记录桌面上出现的数字
        int[] number = new int[105];
        //先记录桌面上的初始数字
        number[n] = 1;
        count++;
        while(true){
            //代表是否进行数组更新
            int flag = 0;
            for(int i=2;i<=n;i++){
                for(int j=0;j<=100;j++){
                    //被除数必须存在
                    if(number[j]==1){
                        //找到符合n%x==1的数字,并且没纪录过
                        if(j%i==1&&number[i]==0){
                            count++;
                            number[i]=1;
                            flag = 1;
                        }
                    }
                }
            }
            //返回计数器
            if(flag==0) break;
        }
        return count;
    }
}
posted @ 2023-05-25 19:42  网抑云黑胶SVIP用户  阅读(23)  评论(0编辑  收藏  举报