莞城网站建设公司,wordpress设置数据库密码,网络推广合作资源平台,外贸营销主题怎么写题目描述 给定一个仅包含0和1的n*n二维矩阵 请计算二维矩阵的最大值 计算规则如下
每行元素按下标顺序组成一个二进制数(下标越大约排在低位)#xff0c; 二进制数的值就是该行的值#xff0c;矩阵各行之和为矩阵的值
允许通过向左或向右整体循环移动每个元素来改变元素在行…题目描述 给定一个仅包含0和1的n*n二维矩阵 请计算二维矩阵的最大值 计算规则如下
每行元素按下标顺序组成一个二进制数(下标越大约排在低位) 二进制数的值就是该行的值矩阵各行之和为矩阵的值
允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置 比如 [1,0,1,1,1]向右整体循环移动两位[1,1,1,0,1] 二进制数为11101值为29 [1,0,1,1,1]向左整体循环移动两位[1,1,1,1,0] 二进制数为11110值为30 输入描述 数据的第一行为正整数记录了N的大小0 N 20 输入的第2到n1行为二维矩阵信息行内元素边角逗号分割 输出描述 矩阵的最大值 示例一 输入
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 第二行向右整体循环移动两位11000得到最大值 24 第三行向右整体循环移动一位10100得到最大值 20 第四行向右整体循环移动两位11100得到最大值 28 第五行向右整体循环移动一位11010得到最大值 26
因此最大122 package com.tarena.test.B10;
import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors;
/** * author Administrator * */ public class B18 { public static void main(String[] args) { try(Scanner sc new Scanner(System.in)){ int lineNum Integer.parseInt(sc.nextLine()); ListString list new LinkedList(); for(int i0;ilineNum;i) { list.add(sc.nextLine()); } System.out.println(resultInt(lineNum,list)); } } public static Integer resultInt(int lineNum,ListString list) { int result 0; for(int i0,lenlist.size();ilen;i) { LinkedListInteger intList Arrays.stream(list.get(i).split(,)) .map(Integer::parseInt) .collect(Collectors.toCollection(LinkedList::new)); int max getVal(intList); for(int j0,len2intList.size();jlen2;j) { intList.addFirst(intList.removeLast()); max Math.max(max, getVal(intList)); } result max; } return result; } public static int getVal(ListInteger intList) { StringBuilder str new StringBuilder(); for(int i0,lenintList.size();ilen;i) { str.append(intList.get(i)); } return Integer.parseInt(str.toString(), 2); } } 了解知识点
1 Integer 类内parseInt 方法的使用
2 Math 类的使用
3 LinkedList addaddFirst,remove,removeLast 等方法的区别