zoukankan      html  css  js  c++  java
  • Cracking the coding interview--Q1.7

    题目

    原文:

    Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.

    译文:

    写一个函数处理一个MxN的矩阵,如果矩阵中某个元素为0,那么把它所在的行和列都置为0.

    解答

    简单题。遍历一次矩阵,当遇到元素等于0时,记录下这个元素对应的行和列。 可以开一个行数组row和列数组col,当元素a[i][j]等于0时, 就把row[i]和col[j]置为true。第二次遍历矩阵时,当某个元素对应的行row[i] 或列col[j]被设置为true,说明该元素在需要被置0的行或列上,因此将它置0。

    代码如下:

    package cha1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class A007 {
        
        static class Pair {
            int x;
            int y;
        }
        
        public static void fun(int[][] M, int n) {
            List<Pair> pairs = new ArrayList<A007.Pair>();
            for (int i=0; i<n; i++)
                for (int j=0; j<n; j++)
                    if (M[i][j] == 0){
                        Pair p = new Pair();
                        p.x = i;
                        p.y =j;
                        pairs.add(p);
                    }
            for (Pair p : pairs)
                doit(M, n, p.x, p.y);
        }
        
        private static void doit(int[][] M, int n, int i, int j) {
            for (int k=0; k<n; k++)
                M[i][k] = 0;
            for (int k=0; k<n; k++)
                M[k][j] = 0;
        }
        
        public static int[][] strToM(String str, int n) {
            String[] ss = str.split(" ");
            System.out.println(ss.length);
            int[][] M = new int[n][n];
            int k = 0;
            for (int i=0; i<n; i++){
                for (int j=0; j<n; j++) {
                    M[i][j] = Integer.parseInt(ss[k]);
                    k++;
                }
            }
            return M;
        }
        
        public static void main(String[] args) {
            String mstr = "1 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16";
            int n= 4;
            int[][] M = strToM(mstr, n);
            fun(M, n);
            for (int i=0; i<n; i++) {
                for (int j=0; j<n; j++)
                    System.out.print(M[i][j] + " ");
                System.out.println();
            }
        }
    }
  • 相关阅读:
    [GoogleAppEngine]编译问题-locale zh_CN
    [Android]Webview中JS接口调用Java-版本问题
    [HTTP基础]3. HTTP链接
    [WebView]简单总结
    [HTTP基础]1.网络开发必备的HTTP协议知识
    [HTTP基础]2.Http和Socket区别
    [HTTP]Android抓包方法(Wireshark)
    [Android]Process&Thread-基本原理
    [Android]Thread两种实现方法
    [Android]消息队列模型——Thread,Handler,Looper,Massage Queue
  • 原文地址:https://www.cnblogs.com/549294286/p/3191502.html
Copyright © 2011-2022 走看看