leetcode 202. Happy Number
2016-04-08 23:08
489 查看
Write an algorithm to determine if a number is “happy”.
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.
Example: 19 is a happy number
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路一:使用set
思路二:使用 Floyd Cycle detection algorithm(弗洛伊德判圈算法,也叫龟兔赛跑算法),主要思想就是如果存在圈,就想象成操场上一快一慢的两个人一起出发绕操场跑步,最终会相遇。空间复杂度O(1), 线性时间复杂度。明显优于算法一。
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.
Example: 19 is a happy number
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路一:使用set
#include<iostream> #include<set> using namespace std; int fun(int m){ int sum = 0; while (m){ sum += (m % 10)*(m % 10); m /= 10; } cout << sum << " "; return sum; } void main(){ int n = 0; cout << "input : "<<endl; cin >> n; if(n<0) cout<<"false"; set<int> s; set<int>::iterator ite; int summ = fun(n); while (true){ if (summ == 1){ cout << "true "; break; } else if (s.find(summ) != s.end()){ cout << "false"; break; } s.insert(summ); summ = fun(summ); } cin.get(); cin.get(); }
思路二:使用 Floyd Cycle detection algorithm(弗洛伊德判圈算法,也叫龟兔赛跑算法),主要思想就是如果存在圈,就想象成操场上一快一慢的两个人一起出发绕操场跑步,最终会相遇。空间复杂度O(1), 线性时间复杂度。明显优于算法一。
class Solution { public: int digitSquareSum(int n) { int sum = 0, tmp; while (n) { tmp = n % 10; sum += tmp * tmp; n /= 10; } return sum; } 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 1; else return 0; } };
相关文章推荐
- Android自定义View之圆形进度条
- iOS学习笔记11-多线程入门
- VS2010不能正确加载 'VSTS for Database Professionals Sql Server Data-tier Application'
- cocos2d-x 2.x打飞机(三)
- cocos2d-x 2.x打飞机(二)
- Android学习(8) -- 短信发送器
- iOS谓词的简单使用
- cocos2d-x 2.x打飞机(一)
- cocos2d-x 2.x粒子系统
- cocos2d-x 2.x 场景切换、事件处理
- Android Context简介
- cocos2d-x 2.x动作
- 蓝牙Ibeacon室内定位和微信摇一摇周边原理分析
- iOS隐藏导航栏尽量用set方法,不要用点。。。会出BUG。。。
- Android设备标识符的使用
- cocos2d-x 2.x动画、定时器、音乐音效
- Unity frameIndex = (int)(timer / (1f / framePerSecond));
- cocos2d-x 3.x pageView的使用
- 使用Android studio 出现的问题解决
- Android Studio 2.0 新版模拟器