题目描述
水仙花数的定义是,这个数等于他每一位上数的幂次之和 见维基百科的定义
比如一个3位的十进制整数153
就是一个水仙花数。因为 153 = 13 + 53 + 33。
而一个4位的十进制数1634
也是一个水仙花数,因为 1634 = 14 + 64 + 34 + 44。
给出n,找到所有的n位十进制水仙花数。
样例
比如 n = 1
, 所有水仙花数为:[0,1,2,3,4,5,6,7,8,9]
。
而对于 n = 2
, 则没有2位的水仙花数,返回 []
。
注意事项
你可以认为n小于8。
解题思路:
思路简单。
注意分离数字的技巧,可以将int转String再转char[]再转int[],实现数字各位分离
同时注意n=1的情况
代码实现(JAVA)
public class Solution {
/**
* @param n: The number of digits
* @return: All narcissistic numbers with n digits
*/
public List<Integer> getNarcissisticNumbers(int n) {
// write your code here
List<Integer> list = new ArrayList<>();
int start = (int)Math.pow(10, n-1);
int end = (int)Math.pow(10, n);
//特别考虑start=1的情况,此时start应为0
if(start == 1)
start = 0;
for(int i= start; i < end; i++)
if(isNarNum(i))
list.add(i);
return list;
}
private boolean isNarNum(int num){
//将int转String再转char[]再转int[],实现数字各位分离
String str = String.valueOf(num);
char[] strs = str.toCharArray();
int[] nums = new int[strs.length];
for(int i=0; i<nums.length; i++)
nums[i] = strs[i] - '0';
int sum = 0;
int len = nums.length;
for(int i=0; i<len; i++)
sum += (int)Math.pow(nums[i], len);
if(num == sum)
return true;
return false;
}
}