public class Solution {
public int[][] multiply(int[][] A, int[][] B) {
int m=A.length,n=A[0].length,nB=B[0].length;
int[][] res=new int[m][nB];
for(int i=0;i<m;i++){
for(int k=0;k<n;k++){
if(A[i][k]!=0){
for(int j=0;j<nB;j++){
if(B[k][j]!=0) res[i][j]+=A[i][k]*B[k][j];
}
}
}
}
return res;
}
}
public class Solution {
class Node{
int x,y;
Node(int x,int y){
this.x=x;
this.y=y;
}
}
public int[][] multiply(int[][] A, int[][] B) {
int[][] res=new int[A.length][B[0].length];
List<Node> l1=new ArrayList<>();
List<Node> l2=new ArrayList<>();
for(int i=0;i<A.length;i++){
for(int j=0;j<A[0].length;j++){
if(A[i][j]!=0) l1.add(new Node(i,j));
}
}
for(int i=0;i<B.length;i++){
for(int j=0;j<B[0].length;j++){
if(B[i][j]!=0) l2.add(new Node(i,j));
}
}
for(Node nA:l1){
for(Node nB:l2){
if(nA.y==nB.x){
res[nA.x][nB.y]+=A[nA.x][nA.y]*B[nB.x][nB.y];
}
}
}
return res;
}
}