如何在JavaScript练习中计算形状的总周长并编写适当的函数
当时我正在参加实习面试,在那里我无法解决一个逻辑题。这对我来说太复杂了。你能帮我解释一下怎么解决吗?(我没有通过,但我真的想知道如何解决它)。练习是: “给定一个字符串的ARR,通过计算所有岛屿的总周长来完成函数陆地周界。每一块土地都用‘X’标记,而水田被表示为‘O’。考虑每一块都是一个完美的1×1块土地。一些更好的可视化例子: ['XOOXO', “XOOXO”, “OOOXO”, “XXOXO”, “OXOOO”] 如图所示: 应返回:“总土地周长:24”, 而如何在JavaScript练习中计算形状的总周长并编写适当的函数,javascript,function,Javascript,Function,当时我正在参加实习面试,在那里我无法解决一个逻辑题。这对我来说太复杂了。你能帮我解释一下怎么解决吗?(我没有通过,但我真的想知道如何解决它)。练习是: “给定一个字符串的ARR,通过计算所有岛屿的总周长来完成函数陆地周界。每一块土地都用‘X’标记,而水田被表示为‘O’。考虑每一块都是一个完美的1×1块土地。一些更好的可视化例子: ['XOOXO', “XOOXO”, “OOOXO”, “XXOXO”, “OXOOO”] 如图所示: 应返回:“总土地周长:24”, 而 ['xoo', “XOXO”
['xoo', “XOXO”, “XOXO”, “OOXX”, “噢”] 如图所示: 应返回:“总土地周长:18” 请您展示我如何解决这个练习的代码示例。 非常感谢!请查看此链接。需要对您的案例进行一些小的修改。请参见下文
<script>
function numOfNeighbour( mat, i, j,rows,cols)
{
var count = 0;
// UP
if (i > 0 && mat[i - 1][j]==='X')
count++;
// LEFT
if (j > 0 && mat[i][j - 1]==='X')
count++;
// DOWN
if (i < rows-1 && mat[i + 1][j]==='X')
count++;
// RIGHT
if (j < cols-1 && mat[i][j + 1]==='X')
count++;
return count;
}
function findPerimeter( mat)
{
var perimeter = 0;
var rows=mat.length;
var cols=mat[0].length;
// Traversing the matrix and finding ones to
// calculate their contribution.
for (var i = 0; i < rows; i++)
for (var j = 0; j < cols; j++)
if (mat[i][j] && mat[i][j]==='X')
perimeter += (4 - numOfNeighbour(mat, i ,j,rows,cols));
return perimeter;
}
console.log("perimeter of ['XOOXO', 'XOOXO', 'OOOXO', 'XXOXO', 'OXOOO'] is ",findPerimeter(['XOOXO', 'XOOXO', 'OOOXO', 'XXOXO', 'OXOOO'])); //24
console.log("perimeter of ['XOOO', 'XOXO', 'XOXO', 'OOXX', 'OOOO'] is " ,findPerimeter(['XOOO', 'XOXO', 'XOXO', 'OOXX', 'OOOO'])); //18
</script>
函数num(mat、i、j、rows、cols)
{
var计数=0;
//向上
如果(i>0&&mat[i-1][j]='X')
计数++;
//左
如果(j>0&&mat[i][j-1]='X')
计数++;
//向下
如果(i
在询问算法之前,请查看并分享您的尝试。算法并不太难。每个X值4个单位,您必须为每个位置移除2个单位,水平或垂直两个X触摸。