給定一個僅包含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+", "") 來實現將 , [ ] 符號去掉!