当前位置: 首页 > news >正文

LeetCode - 解题笔记 -202- Happy Number

Solution 1

整个题需要做两件事情:

  1. 按数位拆分,并计算平方和
  2. 根据屡次变换结果寻找是否存在循环

至于是否循环或到达1是唯二的两种情形,已经在官方题解中快乐数 - 快乐数 - 力扣(LeetCode)给出了详细分析,不再赘述。

第一个部分,直接使用模拟思路即可;第二部分,可以使用 0142. Linked List Cycle II 中的快慢指针思路,而且平方和计算的演化路径唯一确定,可以不使用额外的保存空间处理之。

  • 时间复杂度: O ( log ⁡ N ) O(\log N) O(logN),其中 N N N为输入的数字,按数位处理的整个演化路径是对数复杂度,而其上的循环判定为 O ( 2 log ⁡ N ) O(2 \log N) O(2logN)
  • 空间复杂度: O ( 1 ) O(1) O(1),仅维护常数个状态量
class Solution {
public:
    bool isHappy(int n) {
        
        int slow = n;
        int fast = n;
        while (fast != 1) {
            slow = number(slow);
            fast = number(number(fast));
            
            if (slow == fast) { break; }
        }
        
        return fast == 1;
    }
    
private:
    int number(int now) {
        int sum = 0;
        while (now > 0) {
            int part = now % 10;
            now = now / 10;
            sum += pow(part, 2);
        }
        
        return sum;
    }
};

Solution 2

Solution 1的Python实现

class Solution:
    def isHappy(self, n: int) -> bool:
        
        def number(now: int) -> int:
            ret = 0
            while now > 0:
                part = now % 10
                now = now // 10
                ret += pow(part, 2)
                
            return ret
        
        slow = n
        fast = n
        while fast != 1:
            slow = number(slow)
            fast = number(number(fast))
            
            if slow == fast: break
                
        return fast == 1

相关文章:

  • vue3组件通信实例
  • LeetCode刷题第4周小结
  • python自动化测试——unittest二次开发之自定义测试用例执行器和测试结果记录器(二)
  • fastapi访问/docs接口,页面空白
  • 《Python 计算机视觉编程》学习笔记(二)
  • 【Vue】MVVM模型,vue中的data、methods属性
  • 经典面试题-如何将字符串转化为整型
  • 【Python练习】task-08 综合练习
  • 利用pe系统重装电脑
  • HW面试题
  • python自动化小技巧08——从剪贴板读取数据(快速复制粘贴)
  • 【Linux】之Jumpserver堡垒机的部署/搭建
  • 学习信奥要不要先学python
  • Yolov7训练自己的数据集(超详细)
  • 常见网络知识面试题总结
  • python3.6+scrapy+mysql 爬虫实战
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CSS实用技巧干货
  • es6
  • IDEA常用插件整理
  • javascript数组去重/查找/插入/删除
  • Java反射-动态类加载和重新加载
  • leetcode-27. Remove Element
  • MD5加密原理解析及OC版原理实现
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • session共享问题解决方案
  • webgl (原生)基础入门指南【一】
  • 解决iview多表头动态更改列元素发生的错误
  • 译自由幺半群
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #微信小程序:微信小程序常见的配置传旨
  • (3)(3.5) 遥测无线电区域条例
  • (安卓)跳转应用市场APP详情页的方式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (四)图像的%2线性拉伸
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net打印*三角形
  • .NET企业级应用架构设计系列之结尾篇
  • @Controller和@RestController的区别?
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • []指针
  • [20150904]exp slow.txt
  • [Android] 修改设备访问权限
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]