首页 > 其他 > 详细

LintCode刷题:147 · 水仙花数

时间:2021-05-25 19:17:40      阅读:30      评论:0      收藏:0      [点我收藏+]
描述:

  水仙花数的定义是,这个数等于他每一位数上的幂次之和 见百度百科的定义

  比如一个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。

代码:

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) {
                sum += powerArr[target % 10];
                // 升位
                target = target / 10;
            }
            // 若目标数等于它每一位数上的幂次之和,则为水仙花数
            if (sum == i) {
                narcissisticNumbers.add(i);
            }
        }
        return narcissisticNumbers;
    }
}

 技术分享图片

LintCode刷题:147 · 水仙花数

原文:https://www.cnblogs.com/JiHC/p/14809611.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!