yankewei / LeetCode

LeetCode 问题的解决方法
MIT License
6 stars 0 forks source link

统计参与通信的服务器 #164

Open yankewei opened 1 year ago

yankewei commented 1 year ago

这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。

如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。

请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。

示例 1:

示例1

输入:grid = [[1,0],[0,1]]
输出:0
解释:没有一台服务器能与其他服务器进行通信。

示例 2:

示例2

输入:grid = [[1,0],[1,1]]
输出:3
解释:所有这些服务器都至少可以与一台别的服务器进行通信。

示例 3:

示例3

输入:grid = [[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]]
输出:4
解释:第一行的两台服务器互相通信,第三列的两台服务器互相通信,但右下角的服务器无法与其他服务器通信。

提示:

yankewei commented 1 year ago

PHP

比较简单的模拟题,两次遍历,第一次把每一行和每一列总共有多少个 1 算出来就可以,第二次计算结果,这里要注意不能把自己算进去

class Solution {

    /**
     * @param Integer[][] $grid
     * @return Integer
     */
    function countServers($grid) {
        $row = [];
        $column = [];

        foreach ($grid as $row_index => $rows) {
            $row[$row_index] = 0;

            foreach ($rows as $column_index => $item) {
                if (!array_key_exists($column_index, $column)) {
                    $column[$column_index] = 0;
                }
                if ($item === 1) {
                    $row[$row_index]++;
                    $column[$column_index]++;
                }
            }
        }

        $ret = 0;

        foreach ($grid as $row_index => $rows) {
            foreach ($rows as $column_index => $value) {
                if ($value === 1 && ($row[$row_index] > 1 || $column[$column_index] > 1)) {
                    $ret++;
                }
            }
        }

        return $ret;
    }
}