22.二维矩阵的最大值问题
给定一个仅包含0和1的n*n二维矩阵,请计算二维矩阵的最大值。
计算规则如下
1、每行元素按下标顺序组成一个二进制数(下标越大约排在低位),二进制数的值就是该行的值,矩阵各行之和为矩阵的值
2、允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置
比如:[1,0,1,1,1] 向右整体循环移动两位 [1,1,1,0,1], 二进制数为11101 值为29
[1,0,1,1,1] 向左整体循环移动两位 [1,1,1,1,0], 二进制数为11110 值为30
输入描述
1.数据的第一行为正整数,记录了N的大小, 0<N<=20
2.输入的第2到n+1行为二维矩阵信息, 行内元素边角逗号分割
输出描述
矩阵的最大值
示例1
输入
5
1,0,0,0,1
0,0,0,1,1
0,1,0,1,0
1,0,0,1,1
1,0,1,0,1
输出
122
说明第一行向右整体循环移动一位,得到最大值 11000 24 因此最大122
查看代码
import java.util.*;
public class Demo22 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
int sum = 0;
for(int i = 0; i < N; i++){ //n行初始输入
String[] temp = sc.nextLine().split(",");
LinkedList<String> list = new LinkedList<>(Arrays.asList(temp));
//对单行数据的处理
int max = 0;
for(int j = 0; j < N; j++){
list.addLast(list.remove(0));
//String tos = list.toString(); 结果是[0, 0, 0, 1, 1]
String tos = list.toString().replaceAll("\\W+","");
int num = Integer.parseInt(tos, 2);
if(max < num) max = num;
}
sum += max;
}
System.out.println(sum);
}
}
总结:list.toString() 得到的结果是 [0, 0, 0, 1, 1],要通过用replaceAll("\\W+", "") 来实现将 , [ ] 符号去掉!