Leetcode 之 IslandPerimeter
来源:互联网 发布:淘宝无法开店 编辑:程序博客网 时间:2024/05/16 19:29
问题描述:
思路: 按道理每个实心格子会贡献4条边长,但是如果格子周围如果有别的实心格子,就会少贡献一条,最坏的情况是四周都被包围,就贡献0边长。所以总边长=SumOver_i(实心格子i*4-实心格子i周围实心格子数量)
代码如下:
其中使用了((i-1<0)?0:1*grid[i-1][j])
保证遍历时不超出边界
import java.util.HashMap;public class IslandPerimeter { public int islandPerimeter(int[][] grid) { HashMap<Integer,int[]>h=new HashMap<Integer,int[]>(); int[]temp; int sum=0; int idx=0,nextNum=0,m=grid.length,n=grid[0].length; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ nextNum=((i-1<0)?0:1*grid[i-1][j])+ ((j-1<0)?0:1*grid[i][j-1])+((j+1>n-1)?0:grid[i][j+1])+ ((i+1>m-1)?0:grid[i+1][j]); temp=new int[2]; temp[0]=grid[i][j]; temp[1]=nextNum; h.put(idx,temp); idx++; } } for(int i:h.keySet()){ if(h.get(i)[0]==1) sum+=h.get(i)[0]*4-h.get(i)[1]; } return sum; } public static void main(String[]args){ IslandPerimeter c=new IslandPerimeter(); int[][]grid={{1},{0}};// ={{0,1,0,0},// {1,1,1,0},// {0,1,0,0},// {1,1,0,0}}; System.out.println(c.islandPerimeter(grid)); }}
0 0
- Leetcode 之 IslandPerimeter
- LeetCode 之
- LeetCode之Surrounded Regions
- LeetCode之Palindrome Partitioning
- LeetCode之Word Ladder
- leetcode之Same Tree
- leetcode之sqrt(x)
- leetcode之atoi
- leetcode之Reverse Integer
- leetcode之subsets
- leetcode之Path Sum
- leetcode之same tree
- leetcode之Plus One
- leetcode之Palindrome Partitioning
- leetcode之Valid Palindrome
- leetcode之Edit Distance
- leetcode之Gray code
- leetcode之Two Sum
- 拦截器
- Play Framework 2.5.x 测试环境搭建
- Logistic回归及梯度上升算法
- 前端面试题第一套
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- Leetcode 之 IslandPerimeter
- synchronized和ReentrantLock区别
- C++primer第4版第十章关联容器
- 基本语句总结
- 工作异常记录一
- C++ primer 四 标准库类型vector
- 368. Largest Divisible Subset**
- 处理viewpager轮播滚动时手势点击滑动处理
- codeforces contest 353