题解 | #括号内多个矩阵,实现,欢迎大佬指点#

矩阵乘法计算量估算

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


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int len = in.nextInt();

            //存储矩阵数据
            Map<Integer,Matrix>  map = new HashMap<>();
            /**
             *'A'-'Z' 为65-90
             */
            for(int i = 65;i< 65+len;i++){
               int x = in.nextInt();
               int y = in.nextInt();
                Matrix matrix = new Matrix(x,y);
                map.put(i,matrix);
            }
            //运算法则
            String str =  in.next();
            /**
             * 栈,存储字符和'(',碰到')'就出栈,直到第一次遇到'(',循环结束
             * 将计算结果重新入栈,并放入Map集合中
             */
            Stack<Character> stack = new Stack<>();

            int result = 0;
            //遍历运算法则
            for(int i = 0;i<str.length();i++){
                //入栈
                if(('A'<=str.charAt(i)&&str.charAt(i)<='Z')||'('==str.charAt(i)){
                    stack.add(str.charAt(i));
                }
                //出栈
                if(')'==str.charAt(i)){
                    List<Matrix> list = new ArrayList<>();
                    Character pop = null;
                    while (stack.peek()!='('){
                         pop = stack.pop();
                        Matrix matrix = map.get((int) pop);
                        list.add(0,matrix);
                    }
                    //弹出'('
                    stack.pop();
                    //计算结果,将最新结果重新放入map,入栈
                    result = deal(result,list,map,stack,pop);
                }

            }
            System.out.println(result);
        }
    }

    private static Integer deal(int result, List<Matrix> list,Map<Integer,Matrix> map,Stack<Character> stack,Character pop) {

        int x = 0; int y =0;
        //先取出第一个
        Matrix matrix = list.get(0);
        for(int i =1;i<list.size();i++){
            Matrix matrixY = list.get(i);
            x = matrix.getX();
            y = matrixY.getY();
            result += x*matrix.getY()*y;
            //重新给matrix赋值方便下次计算
            matrix.setX(x);
            matrix.setY(y);
        }
	    //最新值重新放入map,入栈
        map.put((int)pop,matrix);
        stack.add(pop);
        return  result;
    }

    public static  class Matrix{
        private  Integer x;
        private  Integer y;
        private Matrix(){
        }
        private Matrix(Integer x,Integer y){
            this.x= x;
            this.y= y;
        }

        public Integer getX() {
            return x;
        }

        public Integer getY() {
            return y;
        }

        public void setX(Integer x) {
            this.x = x;
        }

        public void setY(Integer y) {
            this.y = y;
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务