题解 | #矩阵乘法计算量估算# 递归找括号

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
class Matrix{
    int row;
    int col;
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static int count=0;
    private static Matrix cal(Matrix a,Matrix b){
        count+=(a.col*b.col*a.row);
        Matrix result=new Matrix();
        result.row=a.row;
        result.col=b.col;
        return result;
    }
    private static Matrix fun(Matrix[] m,String exp){
        List<Matrix> list=new ArrayList<>();
        char[] cs=exp.toCharArray();
        for(int i=0;i<cs.length;i++){
            if(cs[i]=='('){
                int temp=1,j=i+1;
                //找到最外层的括号
                while(temp>0){
                    if(cs[j]=='(')
                        temp++;
                    else if(cs[j]==')')
                        temp--;
                    j++;
                }
                //递归找内层括号
                Matrix result=fun(m,exp.substring(i+1,j-1));
                list.add(result);
                i=j-1;
            }
            if(cs[i]-'A'>=0 && cs[i]-'Z'<=0){
                list.add(m[cs[i]-'A']);
            }
            //如果本层有两个元素了就计算
            if(list.size()==2){
                Matrix result=cal(list.get(0),list.get(1));
                list.clear();
                list.add(result);
            }
        }
        return list.get(0);
    }

    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int num=Integer.valueOf(s.nextLine());
        Matrix[] matrices=new Matrix[num];
        int i=0;
        while(i<num){
            Matrix matrix=new Matrix();
            matrices[i]=matrix;
            String[] cs=s.nextLine().split(" ");
            matrices[i].row=Integer.valueOf(cs[0]);
            matrices[i].col=Integer.valueOf(cs[1]);
            i++;
        }
        String exp=s.nextLine();
        s.close();
        Matrix result=fun(matrices,exp);
//        System.out.println(result.row+" "+result.col+" "+count);
        System.out.println(count);
    }
}

全部评论

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务