算法----------快乐数 (Java版本)

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

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

如果 n 是快乐数就返回 True ;不是,则返回 False 。

在这里插入图片描述

解决方法一:利用set 集合属性

class Solution {
    public boolean isHappy(int n) {
        if (n == 1) {
            return true;
        }
        Set<Integer> numSet = new HashSet<>();
        numSet.add(n);
        int next;
        while ((next = getNext(n)) > 0 && !numSet.contains(next)){
            numSet.add(next);
            n = next;
        }
        return next == 1;
    }

    public static int getNext(int n){
        int i;
        int sum = 0;

        while (n != 0){
            i = n % 10;
            sum += i*i;
            n = n/10;
        }
        return sum;
    }    
}

解决方法二:快慢指针

class Solution {

     public int getNext(int n) {
        int totalSum = 0;
        while (n > 0) {
            int d = n % 10;
            n = n / 10;
            totalSum += d * d;
        }
        return totalSum;
    }

    public boolean isHappy(int n) {
        int slowRunner = n;
        int fastRunner = getNext(n);
        while (fastRunner != 1 && slowRunner != fastRunner) {
            slowRunner = getNext(slowRunner);
            fastRunner = getNext(getNext(fastRunner));
        }
        return fastRunner == 1;
    }
}


参考:
https://leetcode-cn.com/problems/happy-number/solution/

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读