我是靠谱客的博主 贪玩滑板,最近开发中收集的这篇文章主要介绍leetcode258 题解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

LeetCode 258 题目难度等级,easy(官方给的)。leetcode258

题目描述

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.

挑战:

Could you do it without any loop/recursion in O(1) runtime?

不要使用循环和递归实现,只用O(1)的时间复杂度。(ps:后文会给出leetcode中大神的实现)

大致意思:给出一个整数,计算各位的和,直到计算结果为个位数时,返回该结果。

非递归版解法:

public int addDigits(int num) {

		// 存储每位数的和
		int sum = 0;
		while (num >= 10) {
			// 并不能确定数字会执行多少次,所以一定是使用while 循环,而且一定是两层循环的嵌套,
			// 且这两个嵌套都不知道什么时候执行结束。---while与for循环的区别。
			while (num != 0) {
				int digit = num % 10;
				sum += digit;
				num /= 10;
			}
			num = sum;// 更新num的值
			sum = 0;// 对sum清零,准备存储下一个整数的各位的值
		}

		return num;
	}

解题题眼:

1、当不知道循环执行多少次时,只能使用while循环实现。

2、循环的出口是:当计算后的结果是[0,10)区间内的


递归版解法

public int addDigits(int num) {
		if (num < 10 && num >= 0) {
			return num;
		}
		// 递归实现整数的各位求和
		int sum = sumNumInEachDigit(num, 0);
		return addDigits(sum);
	}

	/**
	 * 递归实现整数的各位求和
	 * 
	 * @param num
	 * @param sum
	 * @return
	 */
	public int sumNumInEachDigit(int num, int sum) {

		if (num == 0) {
			return sum;
		}
		sum += (num % 10);
		return sumNumInEachDigit(num / 10, sum);
	}

递归的基础程序:

	/**
	 * 基础的程序,打印整数的每个数字
	 * 
	 * @param num
	 */
	public void printEachNumInDigit(int num) {
		if (num == 0) {
			return;
		}
		System.out.println(num % 10);
		printEachNumInDigit(num / 10);
	}

题眼:

递归版的解法是基于基础程序修改的。步骤:

1、在能写出使用递归打印每位的数字后,

2、然后再来求个各位上的和,

3、实现上层递归,上层递归出口就是[0,10)区间返回。

LeetCode  discussion 题解:

/**
	 * 大神代码一
	 * 
	 * @param num
	 * @return
	 */
	public int addDigits(int num) {

		return num == 0 ? 0 : (num % 9 == 0 ? 9 : (num % 9));
	}

	/**
	 * 大神代码二
	 * @param num
	 * @return
	 */
	public int addDigits2(int num) {

		return 1 + (num - 1) % 9;
	}

类似题目:

leecode 202 HappyNum

题目归类:数论


最后

以上就是贪玩滑板为你收集整理的leetcode258 题解的全部内容,希望文章能够帮你解决leetcode258 题解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部