class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while(n)
{
n = n & (n - 1);
cnt++;
}
return cnt;
}
};
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 0) return 0;
vector<vector<int>> f(n + 1, vector<int>(2, -2e9));
f[0][0] = 0;
for(int i = 1; i <= n; i++)
{
f[i][0] = max(f[i - 1][0], f[i - 1][1]);
f[i][1] = f[i - 1][0] + nums[i - 1];
}
return max(f[n][0], f[n][1]);
}
};
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
queue<TreeNode*> q;
vector<int> res;
if(!root) return res;
q.push(root);
while(q.size())
{
int cnt = q.size();
TreeNode* cur = nullptr;
while(cnt--)
{
cur = q.front();
q.pop();
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
res.push_back(cur->val);
}
return res;
}
};
class Solution {
public:
int n, m;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int cnt = 0;
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.size() == 0 || grid[0].size() == 0) return 0;
n = grid.size(), m = grid[0].size();
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
if(grid[i][j] == '1')
{
dfs(grid, i, j);
cnt++;
}
return cnt;
}
void dfs(vector<vector<char>>& grid, int sx, int sy)
{
for(int i = 0; i < 4; i++)
{
int x = sx + dx[i], y = sy + dy[i];
if(x < 0 || x >= n || y < 0 || y >= m) continue;
if(grid[x][y] != '1') continue;
grid[x][y] = '2'; // 无需额外开判重数组 直接在grid上面改就好
dfs(grid, x, y);
}
}
};