LeetCode.970-强大的整数(Powerful Integers)
这是悦乐书的第367次更新,第395篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第229题(顺位题号是970)。给定两个正整数x和y,如果对于某些整数i >= 0且j >= 0等于x^i + y^j,则整数是强大的。
返回值小于或等于bound的所有强大整数的列表。
你可以按任何顺序返回答案。在你的答案中,每个值最多应出现一次。例如:
输入: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
输入:x = 3,y = 5,bound = 15
输出:[2,4,6,8,10,14]
注意:
- 1 <= x <= 100 
- 1 <= y <= 100 
- 0 <= bound <= 10^6 
02 第一种解法
直接翻译题目即可,没有什么特殊的技巧,但是需要注意一点,因为判断条件时x或者y的几次方小于bound,如果x或者y为1的时候,1的任何次方都会是1,会一直小于bound,会造成死循环。
public List<Integer> powerfulIntegers(int x, int y, int bound) {
    Set<Integer> set = new HashSet<Integer>();
    for (int i=0; Math.pow(x, i) < bound; i++) {
        for (int j=0; Math.pow(y, j) < bound; j++) {
            int sum = (int)Math.pow(x, i)+(int)Math.pow(y, j);
            if (sum <= bound) {
                set.add((int)sum);
            }
            // y等于1时,容易造成死循环,要结束掉
            if (y == 1) {
                break;
            }
        }
        // x等于1时,容易造成死循环,要结束掉
        if (x == 1) {
            break;
        }
    }
    return new ArrayList<>(set);
}
03 第二种解法
针对上面第一种解法,我们也可以不借助Math类的pow方法,用累计相乘替代,思路都是一样的。
public List<Integer> powerfulIntegers2(int x, int y, int bound) {
    Set<Integer> set = new HashSet<Integer>();
    for (int i=1; i<bound; i *= x) {
        for (int j=1; j<bound; j *= y) {
            if (i+j <= bound) {
                set.add(i+j);
            }
            if (y == 1) {
                break;
            }
        }
        if (x == 1) {
            break;
        }
    }
    return new ArrayList<>(set);
}
04 小结
算法专题目前已连续日更超过七个月,算法题文章235+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode.970-强大的整数(Powerful Integers)的更多相关文章
- [Swift]LeetCode970.强整数 | Powerful Integers
		Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some ... 
- LeetCode 970. Powerful Integers (强整数)
		题目标签:HashMap 题目让我们找出所有独一的powerful integers 小于bound的情况下. 把 x^i 看作 a:把 y^j 看作b, 代入for loop,把所有的情况都遍历一遍 ... 
- 【LeetCode】970. Powerful Integers 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力搜索 日期 题目地址:https://leetc ... 
- 【leetcode】970. Powerful Integers
		题目如下: Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j fo ... 
- 【Leetcode_easy】970. Powerful Integers
		problem 970. Powerful Integers solution: class Solution { public: vector<int> powerfulIntegers ... 
- 118th LeetCode Weekly Contest Powerful Integers
		Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some ... 
- LC 970. Powerful Integers
		Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some ... 
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
		C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ... 
- LeetCode:罗马数字转整数【13】
		LeetCode:罗马数字转整数[13] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ... 
随机推荐
- Protobuffer教程
			目录 什么是protobuffer? protobuffer是如何工作的? 为什么不用xml? 1.什么是protobuffer? protobuffer是一种灵活,高效,自动化的机制,用于序列化结构 ... 
- 使用CreateRemoteThread注入DLL
			DLL: // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" ... 
- C++ 编码导致编译错误
			记录一个问题 平时经常用Notepad++写C++,然后g++编译 最近出现一个莫名其妙的问题 原来是编译时遇到了非法字符 用Notepad++一看,原来文件的编码出现的变化 不是UTF-8或者其他对 ... 
- POJ3311Hie with the Pie(floyd传递+DP,状态压缩)
			问题 The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfo ... 
- 【CF750E】New Year and Old Subsequence
			题目大意:给定一个长度为 N 的字符串,定义一个字串是"好的",当且仅当字串中含有一个 "2017" 的子序列,且不含有 "2016" 的子 ... 
- 简述Hibernate常见优化策略
			①制定合理的缓存策略 ② 采用合理的Session管理机制 ③ 尽量使用延迟加载特性 ④如果可以, 选用基于version的乐观锁替代悲观锁 ⑤在开发过程中, 开启hibernate.show_sql ... 
- 解决You may use special comments to disable some warnings.
			问题:运行vue项目出现: You may use special comments to disable some warnings.Use // eslint-disable-next-line ... 
- c语言中"->"和"."的区别
			对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ... 
- [转] Linux环境变量配置文件以及启动顺序
			转自:https://blog.csdn.net/bjnihao/article/details/51775854 一.环境变量配置文件: 对所有用户都起作用 /etc/profile /etc/pr ... 
- SpringBoot2.0集成Shiro
			1.shiro的三个核心概念: 1)Subject:代表当前正在执行操作的用户,但Subject代表的可以是人,也可以是任何第三方系统帐号.当然每个subject实例都会被绑定到SercurityMa ... 
