leetCode之快慢指针遍历

首页目录 点击查看

第一题

解题思路

  • 这道题,我本来想着的是直接用递归的方法,但是题意是使用快慢指针,可是我并不太了解什么是快慢指针,所以,快慢指针是根据大佬们的题解写出来的。

我的答案

  • 递归
        var isHappy = function (n) {
            let map = {}
            let flag = false

            function getSum(n) {
                let sum = 0
                while (n !== 0) {
                    const bit = n % 10
                    sum += bit * bit
                    n = parseInt(n / 10)
                }
                if (sum === 1) {
                    flag = true
                    return true
                }
                if (map[sum]) {
                    flag = false
                    return false
                } else {
                    map[sum] = sum
                    getSum(sum)
                }
            }
            getSum(n)
            return flag
        };
  • 快慢指针
        var isHappy = function (n) {
            let slow = n,
                fast = n;

            function getSum(n) {
                console.log(n)
                let sum = 0
                while (n !== 0) {
                    const bit = n % 10
                    sum += bit * bit
                    n = parseInt(n / 10)
                }
                return sum
            }
            do {
                slow = getSum(slow);
                fast = getSum(getSum(fast))
            } while (slow !== fast);
            return slow === 1
        };
image.png

在我的电脑上两者的区别并不大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。