矩阵最大值
给定一个仅包含0和1的N*N二维矩阵,请计算二维矩阵的最大值,计算规则如下:
1、 每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
2、允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。
比如: [1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1],二进制数为11101,值为29。
1、 每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
2、允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。
比如: [1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1],二进制数为11101,值为29。
[1,0,1,1,1]向左整体循环移动2位变为[1,1,1,1,0],二进制数为11110,值为30。
import java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Integer arraysSize = Integer.valueOf(sc.nextLine()); int ans = 0; for (int i = 0; i < arraysSize; i++) { String currNums = sc.nextLine(); String[] split = currNums.split(","); LinkedList<Integer> nums = new LinkedList<>(); for (int j = 0 ; j < split.length; j++) { nums.add(Integer.valueOf(split[j])); } int maxIntger = Integer.MIN_VALUE; for (int k = 0 ; k < arraysSize; k++) { nums.addLast(nums.remove(0)); String barrys = nums.toString().replaceAll("\\W+", ""); int current = Integer.parseInt(barrys, 2); if (current > maxIntger) { maxIntger = current; } } ans = ans + maxIntger; } System.out.println(ans); sc.close(); } }