开心数算法

这篇博客介绍了作者在研究面试问题时遇到的开心数算法。由于长时间未接触编程,作者在拆分多位数字为单位数字时遇到困难,最终找到解决方案并提供了源码。博客提到了未能使用递归实现,并引用了相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在importNew上看到一篇总结面试问题的文中,里面说到一个开心数算法,比较好奇就看了下。

长时间没有写代码,对于一些基本的东西都不熟悉,为了能把多位数字拆成单位数字,想了很久,到最后都没想到除法(/)和 取余数(%),最后想的方法还绕了很大一圈,下面是源码:(本来还想用递归,但是没能成功)

package com.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;


public class BaseTest {
	
	public static void main(String[] args) {
		BaseTest bt = new BaseTest();
		
		System.out.println(bt.isHappy(19));
		System.out.println(bt.isHappy(20));
		System.out.println(bt.isHappy(69));
		System.out.println(bt.isHappy(5786));
		
		System.out.println("-----------others-----------");
		System.out.println(bt.isHappy1(19));
		System.out.println(bt.isHappy1(20));
		System.out.println(bt.isHappy1(69));
		System.out.println(bt.isHappy1(5786));
	}
	
	//自己写的开心数算法
	private boolean isHappy(int in){
		boolean flag = false;
		int sum = in;
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		while(!list.contains(sum)){
			list.add(sum);
			sum = recursion(sum);
			if(sum == 1){
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	private int recursion(int var){
		int sum = 0;
		String str = "" + var;
		int a1[] = new int[str.length()];
		for(int i = 0; i < str.length(); i++){
			a1[i] = Integer.parseInt("" + str.charAt(i));
		}
	
		for(int i : a1)
			sum += Math.pow(i, 2);
		
		return sum;
	}
	
	
	//网上找的开心数算法
	public boolean isHappy1(int n) {
        Set<Integer> set = new HashSet<Integer>();
        while(mul(n)!=1){
            if(set.contains(mul(n))){
                return false;
            }
            set.add(mul(n));
            mul(n);
            n = mul(n);
        }
        return true;
    }

    public int mul(int n){
        int sum = 0;
        while(n!=0){
            int x = n%10;
            sum = sum + (int)Math.pow(x,2);
            n = n/10;
        }
        return sum;
    }
}


参考:http://blog.youkuaiyun.com/diu_brother/article/details/5107543

           http://blog.youkuaiyun.com/derrantcm/article/details/47997637

          https://leetcode.com/problems/happy-number/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值