0
点赞
收藏
分享

微信扫一扫

哈希表之练习【3】

晚安大世界 2022-03-11 阅读 87

学习安排根据《代码随想录》~leetcode202

题目虽然简单,但是思考后发现,逻辑上还是存在困难的,需要一定的观察能力。

自己只想到了三种情况:

1. 计算结果得到1;

2.计算结果一直循环;

3.计算结果无穷

但因为第三个情况不知道怎么写,所以还是瞅了一眼答案。

通过官方解析知道,第三种情况是不可能存在的。

因为从四位数以及四位数以后,这些数的加和永远会少一位。比如一个四位数,最大加和为324,此时已经为三位数了。

所以推出不存在无穷大的情况。

得到这个点拨后,就好写了。

class Solution {
public:
    bool isHappy(int n) 
    {
        int result=0;
        int m;
        unordered_set<int>s;
        bool t=false;
        while(1)
        {
            while(n>0)
            {
                m=n%10;
                result+=pow(m,2);
                n=n/10;
            }
            if(result==1) 
            {
                t=true;
                break;
            }
            if(s.count(result))
            {
                break;
            }
            else 
            {
                n=result;
                s.insert(result);
            } 
            result=0;
        }
        return t;
    }
};

        这里是自己写的并改正后的代码,第一次写的时候出现了超出时间限制的提示,当时怎么也不知道为啥会出现这种错误,跟官方答案以及代码随想录答案对比,发现也没有什么不一样的地方。

        代码随想录里的答案,知识把计算结果用一个函数封装起来而来而已,也是用到了两次循环。

        于是,我就只能在VS上调试了,后来发现我在 哈希表里插入result后,没有及时将result重置为0,这样导致以来结果出现错误,而来会出现无限循环的情况。

        总结:简单题逻辑不清晰也不好做出来;循环的每一步都要重新验算一遍。

举报

相关推荐

0 条评论