www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

第五十六题www.2527.com

2019-05-02 05:39 来源:未知

编写一个算法来判断一个数是不是“快乐数”。

题目

写一个算法来判断一个数是不是"快乐数"。

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。

样例
19 就是一个快乐数。

1^2   9^2 = 82
8^2   2^2 = 68
6^2   8^2 = 100
1^2   0^2   0^2 = 1

描述

写一个算法来判断一个数是不是"快乐数"。

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

代码

public class Solution {
    /**
     * @param n an integer
     * @return true if this is a happy number or false
     */
    public boolean isHappy(int n) {
        // Write your code here
        while(true)
        {
            n = numSum(n);
            if(n == 4)
            {
                break;
            }

            if(n == 1)
            {
                return true;
            }
        }
        return false;
    }

    int numSum(int n)
    {
        int sum = 0;
        int x;
        while(n != 0)
        {
            x = n % 10;
            n = n /10;
            sum  = x * x;
        }

        return sum;
    }
}

public class Solution {
    /**
     * @param n an integer
     * @return true if this is a happy number or false
     */
    public boolean isHappy(int n) {
        // Write your code here
        HashSet<Integer> hash = new HashSet<Integer>();
        while (n != 1) {
            if (hash.contains(n)) {
                return false;
            }
            hash.add(n);
            n = getNextHappy(n);
        }
        return true;
    }

    private int getNextHappy(int n) {
        int sum = 0;
        while (n != 0) {
            sum  = (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }
}

样例

19 就是一个快乐数。

1^2   9^2 = 82
8^2   2^2 = 68
6^2   8^2 = 100
1^2   0^2   0^2 = 1
class Solution:
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        happySet = set([1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97])
        while n>99:
            n = sum([int(x) * int(x) for x in list(str(n))])
        return n in happySet

实现

public class Test {

    public static boolean isHappy(int n) {
        // write your code here
        List<Integer> list = new ArrayList<>();
        list.add(n);

        int tmp = fun(n);
        while (tmp != 1) {
            if (list.contains(tmp)) {
                return false;
            } else {
                list.add(tmp);
                tmp = fun(tmp);
            }
        }
        return true;

    }

    private static int fun(int n) {
        int tmp = 0;
        tmp = (n % 10) * (n % 10);
        while (n / 10 != 0) {
            n = n / 10;
            tmp  = Math.pow((n % 10), 2);
        }
        return tmp;
    }

}

请关注我的个人网站:https://zhujiaqqq.github.io/

 

TAG标签:
版权声明:本文由澳门新葡8455手机版发布于www.2527.com,转载请注明出处:第五十六题www.2527.com