视频制作软件排行榜,上海单个关键词优化,2021百度模拟点击工具,网站免费进入窗口软件2023题目
请实现一个函数#xff0c;输入一个整数#xff08;以二进制串形式#xff09;#xff0c;输出该数二进制表示中 1 的个数。例如#xff0c;把 9 表示成二进制是 1001#xff0c;有 2 位是 1。因此#xff0c;如果输入 9#xff0c;则该函数输出 2。
示例 1输入一个整数以二进制串形式输出该数二进制表示中 1 的个数。例如把 9 表示成二进制是 1001有 2 位是 1。因此如果输入 9则该函数输出 2。
示例 1
输入00000000000000000000000000001011 输出3 解释输入的二进制串 00000000000000000000000000001011 中共有三位为 ‘1’。
示例 2
输入00000000000000000000000010000000 输出1 解释输入的二进制串 00000000000000000000000010000000 中共有一位为 ‘1’。
示例 3
输入11111111111111111111111111111101 输出31 解释输入的二进制串 11111111111111111111111111111101 中共有 31 位为 ‘1’。
提示
输入必须是长度为 32 的 二进制串 。
解题思路
将输入n逐位移出检查最低位是否为1将32位都检查一遍以后就能得到答案
代码
public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int res0;for (int i0;i32;i,n1){res(n1);}return res;}
}题目2
给你两个 m x n 的二进制矩阵 grid1 和 grid2 它们只包含 0 表示水域和 1 表示陆地。一个 岛屿 是由 四个方向 水平或者竖直上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。
如果 grid2 的一个岛屿被 grid1 的一个岛屿 完全 包含也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含那么我们称 grid2 中的这个岛屿为 子岛屿 。
请你返回 grid2 中 子岛屿 的 数目 。
示例 1
输入grid1 [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]], grid2 [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]] 输出3 解释如上图所示左边为 grid1 右边为 grid2 。 grid2 中标红的 1 区域是子岛屿总共有 3 个子岛屿。
示例 2
输入grid1 [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]], grid2 [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]] 输出2 解释如上图所示左边为 grid1 右边为 grid2 。 grid2 中标红的 1 区域是子岛屿总共有 2 个子岛屿。
提示
m grid1.length grid2.length n grid1[i].length grid2[i].length 1 m, n 500 grid1[i][j] 和 grid2[i][j] 都要么是 0 要么是 1 。
解题思路
第一次对grid1进行dfs给grid1中的岛屿染上不同的颜色第一次对grid2进行dfs检查grid2中的每一个岛屿是否都由同一种颜色构成如果都是同一种颜色说明该岛屿就是一个子岛屿。
代码
class Solution {boolean flag true;int cn0;public void check(int[][] grid1,int[][] grid2,int cnt,int x,int y) {if(x0||xgrid2.length||y0||ygrid2[0].length||grid2[x][y]!1)return;if(grid1[x][y]!cnt||cnt0)flagfalse;grid2[x][y]-1;check(grid1,grid2,cnt, x1, y);check(grid1, grid2,cnt, x-1, y);check(grid1,grid2, cnt, x, y-1);check(grid1,grid2, cnt, x, y1);}public int countSubIslands(int[][] grid1, int[][] grid2) {int cnt2,res0;for (int i 0; i grid1.length; i) {for (int j 0; j grid1[0].length; j) {if(grid1[i][j]1){color(grid1,cnt,i,j);cnt;}}}for (int i 0; i grid2.length; i) {for (int j 0; j grid2[0].length; j) {if(grid2[i][j]1){flagtrue;check(grid1,grid2,grid1[i][j],i,j);if (flag) res;}}}return res;}public void color(int[][] grid1,int cnt,int x,int y) {if(x0||xgrid1.length||y0||ygrid1[0].length||grid1[x][y]!1)return;grid1[x][y]cnt;color(grid1, cnt, x1, y);color(grid1, cnt, x-1, y);color(grid1, cnt, x, y-1);color(grid1, cnt, x, y1);}
}