198.打家劫舍
题目链接
d
p
[
n
]
=
m
a
x
(
d
p
[
n
−
1
]
,
d
p
[
n
−
2
]
+
w
[
n
]
)
dp[n] = max(dp[n-1],dp[n-2]+w[n])
dp[n]=max(dp[n−1],dp[n−2]+w[n])
可以滚动优化一下空间
class Solution {
public:
int rob(vector<int>& nums) {
int p1=0,p2=0,tmp;
for(int i : nums){
tmp = p2;
p2 = max(p2, p1 + i);
p1 = tmp;
}
return p2;
}
};
202.快乐数
题目链接
各个数位上数字的平方和,迭代几次以后这个数不会太大
81
∗
l
o
g
10
n
=
n
81*log_{10}{n} = n
81∗log10n=n
随便列个式子估测一个松上界,发现最多也就180+,然后暴力
class Solution {
public:
bool isHappy(int n) {
int cnt = -200;
int sum = n;
while(cnt++){
if(sum == 1)return true;
int p = sum;
sum = 0;
while(p){
int q = p%10;
sum += q * q;
p /= 10;
}
}
return false;
}
};