题解 | 矩阵乘法计算量估算

矩阵乘法计算量估算

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int[][] matrix = new int[n][2];
        for (int i = 0; i < n; i++) {
            matrix[i][0] = in.nextInt();
            matrix[i][1] = in.nextInt();
        }
        String s = in.next();
        s = s.substring(1, s.length() - 1);
        System.out.println(recursive(matrix, s, 0, s.length() - 1)[2]);
    }
    public static int[] recursive(int[][] matrix, String s, int left, int right) {
        Stack<Integer> stack = new Stack<>();
        int i = left, sum = 0;
        while (i <= right) {
            if (s.charAt(i) == '(') {
                int layer = 0, j = i;
                while (j <= right) {
                    if (s.charAt(j) == '(') {
                        layer++;
                    } else if (s.charAt(j) == ')') {
                        layer--;
                        if (layer == 0) break;
                    }
                    j++;
                }
                int[] res = recursive(matrix, s, i + 1, j - 1);
                sum += res[2];
                if (stack.isEmpty()) {
                    stack.push(res[1]);
                    stack.push(res[0]);
                } else {
                    int r0 = stack.pop(), c0 = stack.pop(), r1 = res[0], c1 = res[1];
                    sum += r0 * c0 * c1;
                    stack.push(c1);
                    stack.push(r0);
                }
                i = j + 1;
            } else if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
                int p = s.charAt(i) - 'A';
                if (stack.isEmpty()) {
                    stack.push(matrix[p][1]);
                    stack.push(matrix[p][0]);
                } else {
                    int r0 = stack.pop(), c0 = stack.pop();
                    int r1 = matrix[p][0], c1 = matrix[p][1];
                    sum += r0 * c0 * c1;
                    stack.push(c1);
                    stack.push(r0);
                }
                i++;
            }
        }
        int[] res = new int[3];
        res[2] = sum;
        res[0] = stack.pop();
        res[1] = stack.pop();
        return res;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务