acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 正经题解| 快乐数

    题目分析 对于一个非负整数,每次将该数替换为它每个位置上的数字的平方和。重复这个过程,直到能变换为 111,也可能是 无限循环。如果能变换为 111,那么这个数即为快乐数。 可以先试一下某个数,找它的变化路径,并将其打印,会发现 无限循环 中会出现很多重复到达的值,这样子就形成了一个圈,所以永远都走不到 111。所以在变化的过程中,如果出现重复的值,则说明形成了一个圈,那么这个数就一定不是一个快乐数。 AC代码 复杂度分析 最大是 5 个位数上都是 999,即 999999999999999,下一个数就跳到了 405405405。接着的变化路径就是 414141 -> 171717 -> 505050 -> .... 接着已经是在 333 位数的范围内了,所以也只需要 405405405 范围内的快乐数的答案就行了,这块如果预处理完后就是 O(1)O(1)O(1) 了。 接着数位分离得出下一个值的这个while,很容易看出来是一个 O(log10n)O(log_{10}n)O(log10 n) 的复杂度。 所以最终的复杂度为:O(logn)O(logn)O(logn)。

    userId_undefined
    AC君
    管理员倔强青铜
    65阅读
    0回复
    5点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页