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

题目收获:

  1. 如何用迭代
  2. 关于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的更多相关文章

  1. 2016.09.14,英语,《Using English at Work》全书笔记

    半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...

  2. Leetcode 337. House Robber III

    337. House Robber III Total Accepted: 18475 Total Submissions: 47725 Difficulty: Medium The thief ha ...

  3. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  4. Murano Weekly Meeting 2016.06.14

    Meeting time: 2016.June.14 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  5. [LeetCode] 213. House Robber II 打家劫舍 II

    Note: This is an extension of House Robber. After robbing those houses on that street, the thief has ...

  6. [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 ...

  7. leetcode:House Robber(动态规划dp1)

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  8. 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 ...

  9. [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 ...

随机推荐

  1. 《编写高质量代码改善JavaScript程序的188个建议》读书笔记

    逗号运算符比较怪异.如    var a =(1,2,3,4);alert(a);// 4      var a = 1,2,3,4;//报错 注意a++和++a的差别,变量在参与运算中不断地变化.v ...

  2. js小功能记录

    个人日常中遇到的js小功能记录,方便查看. /** * 判断是否包含字符串某字符串 * @param {[type]} str [被检测的字符串] * @param {[type]} substr [ ...

  3. HDU2883_kebab

    很好的题目. 有不多于200个任务,每个任务要在si到ei这个时间段内完成,每个任务的任务量是ti*ni,只有一台机器,且其单位时间内可完成的任务量为m. 现在问你,能否使所有的任务全部在规定的时间段 ...

  4. Python 变量 (上)

    Python通过变量引用内存中的值,变量的值占用多少空间是由变量的类型决定的.声明变量不需要指定变量的类型,解释器会自动根据值来判断.变量名称必须符合标识符的定义 标识符 标识符是由字母,数字和下划线 ...

  5. 怎么解决Xing欲

    怎么解决Xing欲 来源:微信号 王路在隐身 这是知乎上的一道问题.原题叫<和尚怎么解决性欲>. 本来由出家人回答更合适,但估计出家人一般不太愿意回答. 我看了几十个答案,几乎都是在调侃出 ...

  6. 如何将SLIC集成到ESXi中

    如何将SLIC集成到ESXi中 参考 http://forums.mydigitallife.info/threads/12982-ESX-ESXi-Bios-Tools/page34?p=72183 ...

  7. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper

    首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...

  8. 第五周linux学习笔记

    第五章 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个. 它为用户空间提供了一种硬件的抽象接口. 系统调用保 证了系统的毡定和安全. 在第 3 ...

  9. js中相等、大小 不同类型之间是如何进行对比的。

    上个小问题 [] > [] false [] < [] false [] == [] false // why? 再上个加强版 '6xxx' < '5xx' false '6xxx' ...

  10. 解题:POI 2011 Strongbox

    首先洛谷的题面十分的劝退(至少对我这个菜鸡来说是这样),我来解释一下(原来的英文题面): 有一个有若干个密码(每个密码都可以开箱子)的密码箱,密码是在$0$到$n-1$的数中的,且所有的密码都满足一个 ...