2016.5.14——leetcode-HappyNumber,House Robber
leetcode:HappyNumber,House Robber
1.Happy Number
这个题中收获2点:
1.拿到题以后考虑特殊情况,代码中考虑1和4,或者说<6的情况,动手算下。(可能要在代码一步步测试中发现,目前还不知道怎么知道这些特殊情况)
2.数字的每一位时,n%10,n/10。(3/7的余数为3,7/3的余数为4)
题目:
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
思路:
我的思路:(作为你个程序末末,希望大家不要嘲笑)
将数字用pow(x,2)来计算,但是不知道怎么写,好吧,跟没有思路一样.
Leetcode/discuss中的思路:
(n%10)*(n%10),n/10.
Tip:在leetcode上每道题都有个discuss,从里面可以看到大家的思路及讨论,个人觉得很不错
代码:
有两个我认为写的比较简洁且易懂的代码。
代码1:
bool isHappy(int n) {
int num=;
while(n!=&&n!=) //1为初始值,如何平方都为1。4则进入死循环
{
while(n)
{
num += (n%) * (n%); //循环将每位平方
n/=;
}
n=num;
num=;
}
return ==n;
}
代码2:
class Solution {
public:
bool isHappy(int n) {
while(n>)
{
int next = ;
while(n)
{
next+=(n%)*(n%);
n/=;
}
n = next;
}
return n==;
}
};
代码1是将数字“1”和“4”单独拿出来看,代码2则是直接从n大于6看。其实两者是一样的,可以自己用算下,“2”和”4“是一样的,”3“,”5“,”6“最终也会进入”2“,”4“循环。
22 =4
42=8
82=16
12+62=37
32+72=58
52+82=89
82+92=145
12+42+52=42
42+22=20
22=4
32=9
92=81
82+12=65
62+52=61
62+12=37(回到22中的循环)
52=25
22+52=29
22+92=85
82+52=89(回到22中的循环)
62=36
32+62=45
42+52=41
42+12=17
12+72=50
52=25(回到52中的循环)
2.House Robber
题目收获:
- 如何用迭代
- 关于C++代码编辑器闪退的:
1).在上述代码位置处加入语句 cin.get();
2).同上述代码添加位置,加入语句 system("pause");
题目:
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
思路:
我的思路:
给定数组,求数组中不相邻的数字的最大和。但是不知道代码怎么写。
Leetcode/discuss中的思路:
跟我的相同,求数组中不相邻的数字的最大和。
代码:
贴出3段代码,前两个是写的简洁易懂的,后面一个是有问题的代码。
代码1:C++代码
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size(), pre = , cur = ; //cur为i-1时的总和,pre为i-2的总和
for (int i = ; i < n; i++) {
int temp = max(pre + nums[i], cur); //如果pre+nums[i](即i-2时的总值)大于cur(即i-1时的总值),此时的总和值为pre+nums[i],否则为cur.
pre = cur;
cur = temp;
}
return cur;
}
};
代码2:c代码,但是思路非常清楚
int max(int a, int b) {
return a > b ? a : b;
} int rob(int* nums, int numsSize) {
int* d; d = (int*) malloc (numsSize * sizeof(nums[])); d[] = nums[];
d[] = max (nums[], nums[]); // d[i] means the most value that can be robbed before the ith store. For each store,
// we have two choice: rob or not rob: (1)if robbing, d[i] = d[i-2] + nums[i], for stores robbed cannot be connected. (2)if not robbing, d[i] = d[i-1] for (int i = ; i < numsSize; i++) {
d[i] = max(d[i-]+nums[i], d[i-]);
} return d[numsSize-];
}
代码3:错误思路
#define max(a, b) ((a)>(b)?(a):(b))
int rob(int num[], int n) {
int a = ;
int b = ; for (int i=; i<n; i++)
{
if (i%==) //以奇偶来求最大,奇数和偶数必然不相邻,但却不一定是最大
{
a = max(a+num[i], b);
}
else
{
b = max(a, b+num[i]);
}
} return max(a, b);
}
代码3的错误原因奇偶不一定就是最大,比如a = { 1, 4, 2, 2, 4, 5, 9, 5 }这数组的最大为17(只选9,4,4),奇数为16,偶数16。可知看奇偶思路是错的。
带主函数的:不会写主函数,不过还是自己吭哧吭哧出来一个主函数的代码,还不知道测试的边界条件是什么。
#include "stdafx.h" //控制台头文件
#include "iostream" //cin,cout输入输出的头文件
#include "vector" //vector的头文件
#include "algorithm" //代码中的max()函数的头文件,min()也是这个
using namespace std; //C++必须写,还不知道为什么 class Solution
{
public:
int rob(vector<int>& nums)
{
int cur = ;
int pre = ;
int temp = ; for (size_t i = ; i < nums.size(); i++) //在visul studio中必须写错size_t不然会报错,但是leetcode上的测试不用,直接写成int就可以
{
temp = max(pre + nums[i], cur);
pre = cur;
cur = temp;
}
return cur;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
vector<int> a = { , , , , , , , }; //测试的,本来想写成不固定的数组,数组由输入来的,暂时还不会
int m;
Solution solution; //貌似必须这么写,不能直接引用
m = solution.rob(a);
cout << "the money is " << m << endl;
cin.get(); //防止编辑器闪退
return ;
}
程序运行中出现一个错误:expected initializer before '<' token
错误原因是:第16行中的 for循环内分号“;”误写成了“,”。
2016.5.14——leetcode-HappyNumber,House Robber的更多相关文章
- 2016.09.14,英语,《Using English at Work》全书笔记
半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...
- Leetcode 337. House Robber III
337. House Robber III Total Accepted: 18475 Total Submissions: 47725 Difficulty: Medium The thief ha ...
- 【算法题 14 LeetCode 147 链表的插入排序】
算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...
- Murano Weekly Meeting 2016.06.14
Meeting time: 2016.June.14 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1. ...
- [LeetCode] 213. House Robber II 打家劫舍 II
Note: This is an extension of House Robber. After robbing those houses on that street, the thief has ...
- [LeetCode] 337. House Robber III 打家劫舍 III
The thief has found himself a new place for his thievery again. There is only one entrance to this a ...
- leetcode:House Robber(动态规划dp1)
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
- 2016.5.15——leetcode:Number of 1 Bits ,
leetcode:Number of 1 Bits 代码均测试通过! 1.Number of 1 Bits 本题收获: 1.Hamming weight:即二进制中1的个数 2.n &= (n ...
- [LeetCode] 337. House Robber III 打家劫舍之三
The thief has found himself a new place for his thievery again. There is only one entrance to this a ...
随机推荐
- 重新认识javascript的settimeout和异步
1.简单的settimeout setTimeout(function () { while (true) { } }, 1000); setTimeout(function () { alert(' ...
- SPOJ NETADMIN_Smart Network Administrator
给一个图,某些点需要单独以某一种颜色的线连接到1点,问如何安排能够使得整个图颜色最多的一条路颜色最少. 显然,二分枚举然后加以颜色其实就是流量了,相当于对每条边限定一个当前二分的流量值,判断能否满流即 ...
- YARN结构分析与工作流程
YARN Architecture Link: http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html ...
- 概率主题模型简介 Introduction to Probabilistic Topic Models
此文为David M. Blei所写的<Introduction to Probabilistic Topic Models>的译文,供大家参考. 摘要:概率主题模型是一系列旨在发现隐藏在 ...
- 题解 CF1005A 【Tanya and Stairways】
楼上别说这个题水,这个题可能还真有不知道的知识点. 看到这个题,想到刚学的单调栈. 单调栈? 单调栈和单调队列差不多,但是我们只用到它的栈顶. 单调,意思就是一直递增或者递减. 这跟这个题有什么关系? ...
- bzoj 1539: [POI2005]Dwu-Double-row
假设一列交换表示为1,不换表示为0. 身高相同的两个人相当于给其中两列了一个限制条件,要么是两个必须相等,要么一个为零一个为一. 有了关系后我们就可以把每列当成一个点建边,边权为0表示必须相同,1为必 ...
- Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列)
Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列) Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...
- LGP5075【JSOI2012】分零食
. 题解: 令$F$为欢乐度$f(x) = Ox^2 + Sx + U$的生成函数,常数项为$0$: 令$G(x) = \sum_{i=0}^{A} F^i (x) $ $ans = [x^M]G;$ ...
- bzoj4427【Nwerc2015】Cleaning Pipes清理管道
题目描述 Linköping有一个相当复杂的水资源运输系统.在Linköping周围的出水点有一些水井.这些水通过管道输送到其它地点.每条管道是从某一个水井到城市的某个位置的直线管道. 所有管道在地下 ...
- [HAOI2011]防线修建
题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...