533. Lonely Pixel II

来源:互联网 发布:淘宝关键词数量 编辑:程序博客网 时间:2024/06/07 06:43

Given a picture consisting of black and white pixels, and a positive integer N, find the number of black pixels located at some specific row Rand column C that align with all the following rules:

  1. Row R and column C both contain exactly N black pixels.
  2. For all rows that have a black pixel at column C, they should be exactly the same as row R

The picture is represented by a 2D char array consisting of 'B' and 'W', which means black and white pixels respectively. 

Example:

Input:                                            [['W', 'B', 'W', 'B', 'B', 'W'],     ['W', 'B', 'W', 'B', 'B', 'W'],     ['W', 'B', 'W', 'B', 'B', 'W'],     ['W', 'W', 'B', 'W', 'B', 'W']] N = 3Output: 6Explanation: All the bold 'B' are the black pixels we need (all 'B's at column 1 and 3).        0    1    2    3    4    5         column index                                            0    [['W', 'B', 'W', 'B', 'B', 'W'],    1     ['W', 'B', 'W', 'B', 'B', 'W'],    2     ['W', 'B', 'W', 'B', 'B', 'W'],    3     ['W', 'W', 'B', 'W', 'B', 'W']]    row indexTake 'B' at row R = 0 and column C = 1 as an example:Rule 1, row R = 0 and column C = 1 both have exactly N = 3 black pixels. Rule 2, the rows have black pixel at column C = 1 are row 0, row 1 and row 2. They are exactly the same as row R = 0.

Note:

  1. The range of width and height of the input 2D array is [1,200].
这里的rule2最容易歧义,exactly same他的意思是不光行列都有n个,而且这n个行的b的位置都必须一样,这才算吻合。仿照第一问的解法,符合条件之后,以这一行为一个string,check每一行,如果相同的行数等于n,count++,最后返回count。代码如下:

public class Solution {    public int findBlackPixel(char[][] picture, int N) {        if (picture == null || picture.length == 0) return 0;        int m = picture.length, n = picture[0].length;        int[] rowCount = new int[m];        int[] colCount = new int[n];        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) {                if (picture[i][j] == 'B') {                    rowCount[i]++;                    colCount[j]++;                }            }        }        int count = 0;        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) {                if (picture[i][j] == 'B' && rowCount[i] == N && colCount[j] == N) {                    String iStr = String.valueOf(picture[i]);                    int kCount = 0;                    for (int k = 0; k < m; k++) {                        if (i != k && picture[k][j] == 'B') {                            String kStr = String.valueOf(picture[k]);                            if (!iStr.equals(kStr)) break;                            else kCount++;                        }                    }                    if (kCount == N-1) count++;                }            }        }        return count;    }}