【leetcode】 463. Island Perimeter
2024-08-28 08:31:09
题目: 以二维数组形式表示坐标岛屿,求边长。
例子:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]] Answer: 16
Explanation: The perimeter is the 16 yellow stripes in the image below:
思路: 一开始想用最笨的办法,就是两次for循环遍历所有元素,如果为1(1为岛屿),就分别判断 上、下、左、右 是否为岛屿,若不是则 边数+1 。
第二次换了想法, 每一条横向 如果有岛屿,只要连续,那么左右两边和始终为2,如果不连续,则左右两边和 +2。 纵向判断 上下边 也是如此。
所用tag记录上一格是否为岛屿 来判断是否连续,如果为连续,则这一横排的 左右边和 始终为2, 如果有一个不连续,则左右边和 +2 。
横向判断用两次for循环,纵向判断也用两次for循环。第二层循环之前要把 tag清空,否则上一行的最后一格 和 下一行的第一格 会误判。
效率一般,更好的没想起来- -
public class Solution {
public int islandPerimeter(int[][] grid) {
int m = 0,tag = 0; //m记录边数 ,tag作为标记 记录是否为连续岛屿
int rows = grid.length;
int columns = grid[0].length;
for(int i = 0;i < rows;i++){ //横向遍历
tag = 0 ; //下层循环 标记清零
for(int j = 0; j < columns; j++){
if(grid[i][j] == 1){
if(tag == 1){
continue;
}
m = m + 2;
tag = 1;
}
else{
tag = 0;
}
}
}
for(int j = 0; j < columns; j++){ //纵向遍历
tag = 0; //下层循环 标记清零
for(int i = 0;i < rows;i++){
if(grid[i][j] == 1){
if(tag == 1){
continue;
}
m = m + 2;
tag = 1;
}
else{
tag = 0;
}
}
} return m;
}
}
最新文章
- MyEclipse 的 配置文件
- AndroidStudio配置gradle,让App自动签名
- HAST 使用笔记
- android LayoutInflater.inflate()的参数介绍
- Swift - String与NSString的区别,以及各自的使用场景
- php json_decode返回失败的排查
- System.Diagnostics.Process 测试案例
- java数据结构之HashSet和HashMap(java核心卷Ⅰ读书笔记)
- jQuery源码框架fn解读
- Node.js配合jQuery UI autocomplete的应用
- Matlab文本处理:提取指定内容
- oracle 之 如何链接别人电脑的oracle
- Tempter of the Bone HDU - 1010
- cdh 5.13 hadoop 集群IP变更详细步骤
- PHP中的__clone()
- 微信公众号H5支付
- WEB网络问题的排查【转】
- SPD
- Java compiler level does not match解决方法, java 修改编译用的jdk的方法
- Makefile的制作
热门文章
- 基于dubbo的分布式系统(一)安装docker
- JS Generator yield
- 【python】windows更改jupyter notebook(ipython)的默认打开工作路径
- LeetCode 16. 最接近的三数之和(3Sum Closest)
- shell初级-----结构化命令
- win下gvim或者linux下的vim安装vundle都适用的配置文件 - 在当前目录及其子目录下**, 的所有文件* 中, 搜索当前光标所在的单词
- retrofit2+rxjava+okhttp网络请求实现
- android中如何自动获取短信验证码
- centos7成功部署OpenLDAP
- 纯JS实现多图片上传(在layui框架中)