水仙花数的定义是,这个数等于他每一位数上的幂次之和 见百度百科的定义
比如一个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; } }
原文:https://www.cnblogs.com/JiHC/p/14809611.html