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

时间:2019-05-16 19:43:10

标签: javascript function

我在实习面试中无法解决一个合乎逻辑的练习。对我来说太复杂了。您能帮我解释一下如何解决吗? (我没有通过,但是我真的很想知道如何解决它)。练习是:

”给出一个字符串数组arr,通过计算所有岛屿的总周长来完成功能landPerimeter。每块土地都将标有“ X”,而水场则表示为“ O”。一块完美的1 x 1块土地。一些示例可以更好地可视化: ['XOOXO',  'XOOXO',  'OOOXO',  'XXOXO',  'OXOOO']

在此处查看图片:https://i.ibb.co/pbDwWSs/pic1.jpg

应返回:“陆地总周长:24”, 而
['XOOO',  'XOXO',  'XOXO',  'OOXX',  'OOOO']

在此处查看图片:https://i.ibb.co/Pcdy8Ct/pic2.jpg

应返回:“陆地总周长:18”

请您显示代码示例,我该如何解决此练习。 非常感谢你!

1 个答案:

答案 0 :(得分:-1)

请参阅此链接find-perimeter-shapes-formed-1s-binary-matrix。需要根据您的情况进行一些小的修改。见下文

<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>