LintCode Python 简单级题目 488.快乐数

题目描述:

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

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

您在真实的面试中是否遇到过这个题?

Yes

样例

19 就是一个快乐数。

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

标签

数学 哈希表

题目分析:

将数字n按位转化为列表,然后循环求元素的平方和,只至结果n==1 or n ==4;

建议百度快乐数的循环结构。

非快乐数总是进入下列重复数列中:
4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 
例如非快乐数8、14:
8 → 64 → 52 → 29 → 85 → 89 → 145 → 42 → 20 → 4

14 → 17 → 50 → 25 → 29 → 85 → 89 → 145 → 42 → 20 → 4

例如快乐数7:
7 → 49 → 97→ 130 → 10 → 1

在十进位下,100以内的快乐数有(OEIS中的数列A00770) :1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100。

源码:

class Solution:
    # @param {int} n an integer
    # @return {boolean} true if this is a happy number or false
    def isHappy(self, n):
        # Write your code here
        if n is None: return False

        while n != 1 and n != 4:
            nums = list(str(n))
            n = 0
            for i in nums:
                n += int(i)**2
        # 循环结束,返回结果
        if n == 1: return True
        if n == 4: return False
时间: 2024-08-24 12:53:45

LintCode Python 简单级题目 488.快乐数的相关文章

LintCode Python 简单级题目 517.丑数

题目描述: 写一个程序来检测一个整数是不是丑数. 丑数的定义是,只包含质因子 2, 3, 5 的正整数.比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7. 注意事项 可以认为 1 是一个特殊的丑数. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 num = 8,返回 true.给出 num = 14,返回 false. 标签 数学 题目分析: 循环取2/3/5的余数和商即可. 余=0,商=1时才为丑数. 源码: class Solution: # @param {i

LintCode Python 简单级题目 82.落单的数

题目描述: 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 [1,2,2,1,3,4,3],返回 4 挑战 一次遍历,常数级的额外空间复杂度 标签 贪心 题目分析: 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 利用  n^n = 0的特性,一个数异或本身结果为0 而  n^0 = n,所以 n^n-1^n = n-1, 所以保存异或结果,循环异或列表元素即可

LintCode Python 简单级题目 最小子数组和、最大子数组和

题目1 最小子数组 描述: 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 注意事项 子数组最少包含一个数字 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[1, -1, -2, 1],返回 -3 标签 LintCode 版权所有 子数组 贪心 数组 题目2 最大子数组 描述: 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[?2,2,?3,4,?1,2,1,?5,

LintCode Python 简单级题目 451.两两交换链表中的节点

题目描述: 给一个链表,两两交换其中的节点,然后返回交换后的链表. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. 挑战 你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 标签 链表 题目分析: 你的算法只能使用常数的额外空间,即不能新建链表: 并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 创建三个指针: head指向开始交换的

LintCode Python 简单级题目 407.加一

题目描述: 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 该数字按照大小进行排列,最大的数在列表的最前面. 您在真实的面试中是否遇到过这个题? Yes 样例 给定 [1,2,3] 表示 123, 返回 [1,2,4]. 给定 [9,9,9] 表示 999, 返回 [1,0,0,0]. 标签 数组 谷歌 题目分析: 末尾[-1]加1,然后逆序循环,判断元素是否为10,然后处理: 特殊处理,[0]元素为10,需要在首位插入一个1. 源码: class Solution:

LintCode Python 简单级题目 60.搜索插入位置

题目描述: 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引.如果没有,返回到它将会被按顺序插入的位置. 你可以假设在数组中无重复元素. 您在真实的面试中是否遇到过这个题? Yes 样例 [1,3,5,6],5 → 2 [1,3,5,6],2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6],0 → 0 挑战 O(log(n)) time 标签 数组 排序数组 二分法 题目分析: 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引.如果没有,返回到它将会被按

LintCode Python 简单级题目 433.岛屿的个数

题目描述: 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 您在真实的面试中是否遇到过这个题? Yes 样例 在矩阵: [ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1] ] 中有 3 个岛. 标签 脸书 谷歌 Zenefits 题目分析: 循环2维数组,找到其值为1的元素,count++, 然后递

LintCode Python 简单级题目 423.有效的括号序列

题目描述: 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 您在真实的面试中是否遇到过这个题? Yes 样例 括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号. 标签 栈 谷歌 题目分析: 循环字符串,遇左括号入栈. 遇右括号,从栈顶取元素然后配对,判断配对结果. 最后再判断栈是否不为空. 源码: cla

LintCode Python 简单级题目 39.恢复旋转排序数组

题目描述: 给定一个旋转排序数组,在原地恢复其排序. 您在真实的面试中是否遇到过这个题? Yes 说明 什么是旋转数组? 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3] 样例 [4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5] 挑战 使用O(1)的额外空间和O(n)时间复杂度 标签 数组 排序数组 题目分析: 挑战 使用O(1)的额外空间和O(n)时间复杂度 1.不建立新数组,在原数组