随笔 - 88  文章 - 0  评论 - 12  阅读 - 84003

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;
    }
}
复制代码

posted on   法哈席基  阅读(136)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示