zoukankan      html  css  js  c++  java
  • Leetcode970. Powerful Integers强整数

    给定两个非负整数 x 和 y,如果某一整数等于 x^i + y^j,其中整数 i >= 0 且 j >= 0,那么我们认为该整数是一个强整数。

    返回值小于或等于 bound 的所有强整数组成的列表。

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

    示例 1:

    输入:x = 2, y = 3, bound = 10 输出:[2,3,4,5,7,9,10] 解释: 2 = 2^0 + 3^0 3 = 2^1 + 3^0 4 = 2^0 + 3^1 5 = 2^1 + 3^1 7 = 2^2 + 3^1 9 = 2^3 + 3^0 10 = 2^0 + 3^2

    示例 2:

    输入:x = 3, y = 5, bound = 15 输出:[2,4,6,8,10,14]

    提示:

    • 1 <= x <= 100
    • 1 <= y <= 100
    • 0 <= bound <= 10^6

    暴力法

    如果枚举x的指数,那么每次选择指数后都要去得到x的幂运算结果。每次都进行幂运算,那么就重复了很多操作。所以先把幂运算的结果保存下来,去枚举幂运算的结果

    class Solution {
    public:
        vector<int> powerfulIntegers(int x, int y, int bound) 
        {
            vector<int> vx;
            vector<int> vy;
            vector<int> ans;
            map<int, bool> check;
            int tempx = 1;
            int tempy = 1;
            if(x == 1)
            {
                vx.push_back(1);
            }
            else
            {
                while(tempx <= bound)
                {
                    vx.push_back(tempx);
                    tempx *= x;
                }
            }
            if(y == 1)
            {
                vy.push_back(1);
            }
            else
            {
                while(tempy <= bound)
                {
                    vy.push_back(tempy);
                    tempy *= y;
                }
            }
            for(int i = 0; i < vx.size(); i++)
            {
                for(int j = 0; j < vy.size(); j++)
                {
                    if(vx[i] + vy[j] <= bound && !check[vx[i] + vy[j]])
                    {
                        check[vx[i] + vy[j]] = 1;
                        ans.push_back(vx[i] + vy[j]);
                    }
                }
            }
            return ans;
        }
    };

    通过这道题突然想到了另外一道题,用的很简便神奇的方法。

    题目描述

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    class Solution {
    public:
        int GetUglyNumber_Solution(int index) {
            if(index <= 0)
                return index;
            vector<int> res(index);
            res[0] = 1;
            int t2 = 0, t3 = 0, t5 = 0;
            for(int i = 1; i < index; i++)
            {
                res[i] = min(res[t2] * 2, min(res[t5] * 5, res[t3] * 3));
    //不用else if的原因是为了去重
                if(res[i] == res[t2] * 2)
                    t2++;
                if(res[i] == res[t3] * 3)
                    t3++;
                if(res[i] == res[t5] * 5)
                    t5++;
            }
            return res[index - 1];
        }
    };
    

  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433762.html
Copyright © 2011-2022 走看看