Happy Number

    xiaoxiao2021-03-25  71

    第一种,用哈希,每次算完一个平方和去表里看一看,如果这个不是1还和表重了,那就不是:

    class Solution { public: bool isHappy(int n) { unordered_map<int,int> Fi; while(n!=1) { int sum=0; while(n!=0) { sum+=pow(n,2); n/=10; } if(Fi.find(sum)==Fi.end()) { Fi[sum]=1; n=sum; } else { return false; } } return true; } }; 第二种比较好玩,用快慢指针,看起来这种,涉及到是一个圈的都可以用快慢指针。这里有一个小语法点要注意,就是do while会先无条件执行一次,之后再判断。这个以前我不太用,这样看以后要先执行一次的可以用do while 

    class Solution { public: bool isHappy(int n) { int slow,fast; slow=fast=n; do { slow=digitSquareSum(slow); fast=digitSquareSum(fast); fast=digitSquareSum(fast); }while(slow!=fast); if(slow==1) return true; else return false; } int digitSquareSum(int n){ int temp=0; while(n) { temp+=pow(n,2); n/=10; } return temp; } };

    转载请注明原文地址: https://ju.6miu.com/read-32217.html

    最新回复(0)