2023-05-02 LeetCode每日一题(强整数)

2023-05-02每日一题

一、题目编号

970. 强整数

二、题目链接

点击跳转到题目位置

三、题目描述

给定三个整数 x 、 y 和 bound ,返回 值小于或等于 bound 的所有 强整数 组成的列表 。

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

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

四、解题代码

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        vector<int> xs;
        vector<int> ys;
        vector<int> res;
        int i = 1;
        int j = 1;
        while(i <= bound){
            xs.push_back(i);
            i *= x;
            if(x == 1){
                break;
            }
        }
        while(j <= bound){
            ys.push_back(j);
            j *= y;
            if(y == 1){
                break;
            }
        }
        int hash[bound+5];
        memset(hash, 0, sizeof(hash));
        for(i = 0; i < xs.size(); ++i){
            for(j = 0; j < ys.size(); ++j){
                int temp = xs[i] + ys[j];
                if(temp <= bound && hash[temp] == 0){
                    res.push_back(temp);
                    hash[temp] = 1;
                }
            }
        }
    return res;
    }
};

五、解题思路

(1) 首先我们要理清楚什么是强整数,强整数就是可以被 xi + yj表达的数字。

(2) 我们通过(1) 中所描述的定义,又知晓x和y,所以先将所有可能的xi和yj全部存储起来,我们用xs和ys两个数组来存储xi和yj,xs和ys中的数字是一定不能超过bound的。。

(2) 接着开始用两层循环,找出所有不同的强整数即可。而判断的方式是用bound来判断是否超过上限,用哈希表来判断是否已经判断过该数字。如果超过了上限,或哈希表中已经标记了则不压入数组当中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值