Lettcode_202_Happy Number

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45396585


Write an algorithm to determine if a number is "happy".

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 19 is a happy number

  • 12 + 92 = 82
  • 82 + 22 = 68
  • 62 + 82 = 100
  • 12 + 02 + 02 = 1


思路:

(1)题意为判断给定的整数是否为一个“快乐的数”,所谓快乐的数需要满足一下几个条件:将该整数的每个位上的数字的平方相加得到一个新的整数,循环对新的整数进行上述操作,如果最后所得整数收敛于1,则这样的数字为一个“快乐的数”。

(2)首先,判断0肯定不是一个“快乐的数”;其次,对初始数字的每个位上数的平方相加,循环进行前面的操作;需要注意的是,对于可能会出现死循环的数字需要进行判断,需要判断循环的次数,这里通过测试得到循环次数为4,即如果4次循环过程中,每一次所得数字中都不收敛于1,则判断该数字不是一个“快乐的数”,否则,则是一个“快乐的数”;最后,对于那些循环得到的结果为1的数字,直接返回true,即该数字是一个“快乐的数”。

(3)详情见下方代码。希望本文对你有所帮助。


算法代码实现如下:

/**
 * @author liqq
 */
public class HappyNumber {
	public static boolean isHappy(int n) {
		if (n == 0)
			return false;
		return testhappy(0, n);
	}

	private static boolean testhappy(int number, int n) {
		int sum = n;
		int add = 0;
		boolean hasone = false;
		while (sum != 0) {
			int square = (sum % 10) * (sum % 10);
			add += square;
			sum = sum / 10;
			if (sum % 10 == 1) {
				hasone = true;
			}
		}
		number++;

		int test = add;
		while (test != 0) {
			if (test % 10 == 1) {
				hasone = true;
			}
			test = test / 10;
		}

		if (hasone == false && number > 4)
			return false;

		if (add != 1 || add % 10 != 1) {
			boolean istrue = testhappy(number, add);
			if (istrue)
				return true;
		} else {
			return true;
		}
		return false;
	}
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。