题目要求:有个0、1矩阵、0代表海洋、1代表岛屿、求岛屿能连成的最大周长。
解题思路:
1.给矩阵周围四周填充0 2. 遍历每个元素,若元素为1,且计算该元素上下所有相邻0元素的个数、那么总的0元素的个数相加就是整个岛屿的最大周长。
代码如下:
// 0 表示海洋,1表示陆地
const getHouseC = (arr) => {
const fillArr = getFillArr(arr);
const rows = fillArr.length;
const cols = fillArr[0].length;
let res = 0;
for(let i = 1 ;i < rows - 1; i++) {
for(let j = 1;j < cols - 1;j++) {
if (fillArr[i][j] === 1) {
if(fillArr[i-1][j] === 0) {
res++;
}
if(fillArr[i][j-1] === 0) {
res++;
}
if(fillArr[i+1][j] === 0) {
res++;
}
if(fillArr[i][j+1] === 0) {
res++;
}
}
}
}
return res;
}
const getFillArr = (arr) => {
arr.forEach( item => {
item.push(0);
item.unshift(0);
});
const rowLen = arr.length;
const colLen = arr[0].length;
arr.push(Array(arr[0].length ).fill(0));
arr.unshift(Array(arr[0].length).fill(0));
return arr;
}
const data = [
[1,0,0,1,0],
[1,1,1,1,1],
[0,1,1,1,1]
]
console.log(getHouseC(data)); // 18