LintCode刷题:147 · 水仙花数
描述:
水仙花数的定义是,这个数等于他每一位数上的幂次之和 见百度百科的定义
比如一个3位的十进制整数153
就是一个水仙花数。因为 153 = 1^3 + 5^3 + 3^3。
而一个4位的十进制数1634
也是一个水仙花数,因为 1634 = 1^4 + 6^4 + 3^4 + 4^4。
给出n
,找到所有的n位十进制水仙花数。
ps:你可以认为n小于8。
样例:
输入:1
输出:[0,1,2,3,4,5,6,7,8,9]
思路:
1.得到出0-9的n次幂数组;输入:1
2.获取n位数最大值和最小值,遍历;
3.求各位数的n次幂的和;
4.判断是否水仙花数。
代码:
import java.util.LinkedList; import java.util.List; /** * @author Fahaxiki * @date 2021-05-25 */ public class Solution { /** * @param n: 位数 * @return 所有n位数的水仙花数 */ public List<Integer> getNarcissisticNumbers(int n) { // 所有n位数的水仙花数 List<Integer> narcissisticNumbers = new LinkedList<>(); // n最小为1 if (n < 1) { return narcissisticNumbers; } // 获取0-9的n次幂数组 int[] powerArr = new int[10]; for (int i = 0; i < powerArr.length; i++) { // i^n powerArr[i] = (int) Math.pow(i, n); } // n位数最大值 int max = (int) Math.pow(10, n); // n位数最小值(n为1时,最小值为0) int min = max / 10 - 1; // 遍历n位数 for (int i = min; i < max; i++) { // 当前目标数 int target = i; // 目标数每一位数的n次幂的和 int sum = 0; // 从个位开始,取得该位的n次幂的值,并求和 while (target > 0) { // 获取个位的n次幂 sum += powerArr[target % 10]; // 升位 target /= 10; } // 若目标数等于它每一位数上的幂次之和,则为水仙花数 if (sum == i) { narcissisticNumbers.add(i); } } return narcissisticNumbers; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端