class Solution {
public:
int hammingWeight(uint32_t n) {
int res = 0;
for(int i = 0; i < 32; i ++)
if(n >> i & 1)
res ++;
return res;
}
};
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size();
vector<int>f(n + 1, 0), g(n + 1, 0);
for(int i = 1; i <= n; i ++)
{
f[i] = g[i - 1] + nums[i - 1];
g[i] = max(f[i - 1], g[i - 1]);
}
return max(f[n], g[n]);
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
queue<pair<TreeNode*, int>>Q;
if(root)
Q.push(make_pair(root, 0));
while(!Q.empty())
{
TreeNode* node = Q.front().first;
int depth = Q.front().second;
Q.pop();
if(res.size() == depth)
res.push_back(node->val);
else
res[depth] = node->val;
if(node->left)
Q.push(make_pair(node->left, depth + 1));
if(node->right)
Q.push(make_pair(node->right, depth + 1));
}
return res;
}
};
class Solution {
public:
int n, m;
int numIslands(vector<vector<char>>& grid) {
if(grid.empty() || grid[0].empty()) return 0;
n = grid.size(), m = grid[0].size();
int res = 0;
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++)
if(grid[i][j] == '1')
{
res ++;
dfs(grid, i, j); //每一次吧1周围赋值为0
}
return res;
}
void dfs(vector<vector<char>>&grid, int x, int y)
{
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
grid[x][y] = '0';
for(int i = 0; i < 4; i ++)
{
int a = x + dx[i], b = y + dy[i];
if(a >= 0 && a < n && b >= 0 && b < m && grid[a][b] == '1')
dfs(grid, a, b);
}
}
};