题目描述
水仙花数的定义是,这个数等于他每一位数上的幂次之和 见维基百科的定义
比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 13 + 53 + 33。
而一个4位的十进制数1634也是一个水仙花数,因为 1634 = 14 + 64 + 34 + 44。
给出n,找到所有的n位十进制水仙花数。
你可以认为n小于8。
实例
样例 1:
输入: 1
输出: [0,1,2,3,4,5,6,7,8,9]
样例 2:
输入: 2
输出: []
样例解释: 没有2位数的水仙花数。
题解
Java
public static int[] getN(int n){
if (n==1){
return new int[]{0,1,2,3,4,5,6,7,8,9};
}
int[] s = new int[10];
ArrayList<Integer> list = new ArrayList<>();
s[0] = 0;
s[1] = 1;
for (int i = 2; i <= 9; i++) {
int a = (int) Math.pow(i,n);
s[i] = a;
}
int lower = (int) Math.pow(10,n-1);
int upper = lower * 10;
for (int i = lower;i<upper;i++){
int k = i;
int sum = 0;
while ( k>0 ){
int a = k%10;
sum += s[a];
k = k/10;
}
if (sum == i){
list.add(i);
}
}
return list.stream().mapToInt(Integer::valueOf).toArray();
}