LeetCode之水仙花數(shù)

1. 水仙花數(shù)

以下是摘自 維基百科 中的釋義:

數(shù)論中,水仙花數(shù)Narcissistic number[1][2],也被稱為超完全數(shù)字不變數(shù)pluperfect digital invariant, PPDI[3]、自戀數(shù)、自冪數(shù)、阿姆斯壯數(shù)阿姆斯特朗數(shù)Armstrong number[4] ,用來描述一個(gè)N位非負(fù)整數(shù),其各位數(shù)字的N次方和等于該數(shù)本身。

這里定義的N=3。

2. 問題描述

春天是鮮花的季節(jié),水仙花就是其中最迷人的代表,數(shù)學(xué)上有個(gè)水仙花數(shù),他是這樣定義的: “水仙花數(shù)”是指一個(gè)三位數(shù),它的各位數(shù)字的立方和等于其本身,比如:153=13+53+3^3。 現(xiàn)在要求輸出所有在m和n范圍內(nèi)的水仙花數(shù)。

對(duì)于每個(gè)測試實(shí)例,要求輸出所有在給定范圍內(nèi)的水仙花數(shù),就是說,輸出的水仙花數(shù)必須大于等于m,并且小于等于n,如果有多個(gè),則要求從小到大排列在一行內(nèi)輸出,之間用一個(gè)空格隔開;
如果給定的范圍內(nèi)不存在水仙花數(shù),則輸出no;
每個(gè)測試實(shí)例的輸出占一行。

輸入:
100 120
300 380

輸出:
no
370 371

3. 問題分析

我的解決思路:先將給出的數(shù)字按照個(gè)位十位百位的順序拆解,然后計(jì)算各數(shù)位三次方之和,再和原數(shù)進(jìn)行比較比較。思路比較簡單。

代碼實(shí)現(xiàn)

package com.odd.number;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author zhulongkun20@163.com
 * @since 2018/11/3 下午12:58
 */
public class Solution {
    private static List<Integer> getNumbers(int start, int end) {
        List<Integer> comps = new ArrayList<>();
        List<Integer> result = new ArrayList<>();
        double num;
        for (int i = start; i <= end; i++) {
            num = 0;
            comps.clear();
            comps = getNumberComponent(i);
            for (Integer comp : comps) {
                num += Math.pow(comp, 3);
            }
            if (num == i) {
                result.add(i);
            }
        }
        return result;
    }

    private static List<Integer> getNumberComponent(int number) {
        int base = 10;
        int comp;
        int lastComp;
        List<Integer> components = new ArrayList<>();
        while (number % (base / 10) != number) {
            int power = 0;
            lastComp = 0;
            for (Integer index : components) {
                lastComp += index * Math.pow(10, power);
                power += 1;
            }
            comp = ((number - lastComp) % base) / (base / 10);
            components.add(comp);
            base *= 10;
        }
        return components;
    }

    public static void main(String[] args) {
        List<Integer> result;
        Scanner input = new Scanner(System.in);
        while (input.hasNextLine()) {
            String str = input.nextLine();
            String[] numbers = str.split(" ");
            for (int i = 0; i < numbers.length - 1; i++) {
                int start = Integer.valueOf(numbers[i]);
                int end = Integer.valueOf(numbers[i + 1]);
                result = getNumbers(start, end);
                if (result.isEmpty()) {
                    System.out.println("no");
                } else {
                    for (Integer aResult : result) {
                        System.out.print(aResult + " ");
                    }
                    System.out.println();
                }
            }
        }
    }
}

他山之石

貌似在評(píng)論區(qū)里看到了有用python解決的:


QQ20181103-142633@2x.png

沒太看懂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看了OKQ同學(xué)的多篇游記,便生出了寫一篇華山之行的記錄。歐筆觸生動(dòng),尤其在《浙江之行》中尋找住處的那一段,寫得...
    Stormwalker閱讀 3,418評(píng)論 4 3
  • 最近安裝了Deepin系統(tǒng),難免要折騰一番。將過程記錄下來,方便日后查看&幫助遇到同樣問題的童鞋。 系統(tǒng)安裝 1....
    4h0per閱讀 2,974評(píng)論 0 4
  • 一好三改*9.10 記錄如下: 雖然是教師節(jié),但是真是非常不愉快的一天。 一好: 晚上和同事一起去隔壁學(xué)校吃了檸檬...
    hhzha0閱讀 169評(píng)論 0 0
  • 文/leileely 對(duì)于醫(yī)學(xué),我?guī)缀醪欢?。但?duì)于醫(yī)生和醫(yī)院,我卻并不陌生。一是小學(xué)期間經(jīng)歷過一場住院近一個(gè)月的小...
    leileely閱讀 1,397評(píng)論 0 4

友情鏈接更多精彩內(nèi)容