如何在JavaScript练习中计算形状的总周长并编写适当的函数

如何在JavaScript练习中计算形状的总周长并编写适当的函数,javascript,function,Javascript,Function,当时我正在参加实习面试,在那里我无法解决一个逻辑题。这对我来说太复杂了。你能帮我解释一下怎么解决吗?(我没有通过,但我真的想知道如何解决它)。练习是: “给定一个字符串的ARR,通过计算所有岛屿的总周长来完成函数陆地周界。每一块土地都用‘X’标记,而水田被表示为‘O’。考虑每一块都是一个完美的1×1块土地。一些更好的可视化例子: ['XOOXO', “XOOXO”, “OOOXO”, “XXOXO”, “OXOOO”] 如图所示: 应返回:“总土地周长:24”, 而 ['xoo', “XOXO”

当时我正在参加实习面试,在那里我无法解决一个逻辑题。这对我来说太复杂了。你能帮我解释一下怎么解决吗?(我没有通过,但我真的想知道如何解决它)。练习是:

“给定一个字符串的ARR,通过计算所有岛屿的总周长来完成函数陆地周界。每一块土地都用‘X’标记,而水田被表示为‘O’。考虑每一块都是一个完美的1×1块土地。一些更好的可视化例子: ['XOOXO', “XOOXO”, “OOOXO”, “XXOXO”, “OXOOO”]

如图所示:

应返回:“总土地周长:24”, 而
['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触摸。