牛客NC391 快乐数【simple 模拟法 Java/Go/PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/293b9ddd48444fa493dd17da0feb192d

思路

	  直接模拟即可

Java代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return bool布尔型
     */
    public boolean happynum (int n) {
        //直接模拟即可
        if (n == 1) return true;
        Set<Integer> visited = new HashSet<>();

        while (!visited.contains(n)) {
            int next = 0;
            visited.add(n);
            while (n > 0) { //获得n每一位上的数字,并平方累加
                int cur = n % 10;
                next += cur * cur;
                n = n / 10;
            }
            if (next == 1) return true;
            if (visited.contains(next)) {
                return false;
            }

            n = next;
        }


        return false;
    }
}

Go代码

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @return bool布尔型
 */
func happynum(n int) bool {
	//直接模拟即可
	if n == 1 {
		return true
	}

	set := map[int]bool{}

	_, ok := set[n]
	for !ok {
		set[n] = true
		next := 0

		for n > 0 { //获得n上的每一位数并累加
			cur := n % 10
			next += cur * cur
			n = n / 10
		}

		if next == 1 {
			return true
		}

		_, ok1 := set[next]
		if ok1 {
			return false
		}

		n = next
	}

	return false
}

PHP代码

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return bool布尔型
 */
function happynum( $n )
{
     //直接模拟即可
    if($n ==1) return true;
    $set = [];

    while (true){
        $set[$n] = 1;

        $next = 0;

        while ($n>0){ //获取n上每一位数并累加
            $cur = $n%10;
            $next+=$cur*$cur;
            $n = intval($n/10);
        }

        if($next ==1) return true;
        if(isset($set[$next])) break;
        $n = $next;
    }


    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵长辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值