【每日一题Day194】LC970强整数 | 枚举

该问题是一个算法题目,目标是找到所有小于或等于bound的强整数。通过枚举i和j的值,计算xi+yj,并将结果存入集合中去重。算法的时间复杂度和空间复杂度均为O(log^2bound),当x或y为1时,可提前退出循环以优化效率。

强整数【LC970】

给定三个整数 xybound ,返回 值小于或等于 bound 的所有 强整数 组成的列表

如果某一整数可以表示为 xi + yj ,其中整数 i >= 0j >= 0,那么我们认为该整数是一个 强整数

你可以按 任何顺序 返回答案。在你的回答中,每个值 最多 出现一次。

  • 思路

    数据范围不大,因此可以枚举iiijjj可能的组合,如果xxx或者yyy为1时,退出循环

  • 实现

    class Solution {
        public List<Integer> powerfulIntegers(int x, int y, int bound) {
            Set<Integer> set = new HashSet<>();
            int i = 0, j = 0;
            int curX = 1;
            while (curX <= bound){
                int curY = 1;
                while (curX + curY <= bound){
                    set.add(curX + curY);
                    curY *= y;
                    if (y == 1) break;
                }
                curX *= x;
                if (x == 1) break;
            }
            return new ArrayList<>(set);
    
        }
    }
    
    • 复杂度
      • 时间复杂度:O(log2bound)O(log^2bound)O(log2bound)
      • 空间复杂度:O(log2bound)O(log^2bound)O(log2bound)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值