赞
踩
对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。
例如:
提示:矩阵从左下方到右上方排列,从左向右与从上向下看顺序不同,从左上方到右下方排列,从左向右与从上向下看顺序相同
暴力求解:
for (int l=j+1; l < 50; l++) { //(0,1),(0,2)
if (p<c[i][l]) sum++;
}
for (int l = i+1; l < 30; l++) { //(1,0)(1,1)(1,2)
if (p<c[l][j]) sum++;
}
int l=i+1;int r=j+1;
while (l<30 && r<50){
if(p<c[l][r]) sum++; //(1,1)(2,2)(3,3)
l+=1;r+=1;
}

每一行每一行的向右下比较,两个值无论是从左向右看还是从上向下看顺序都一样。
l=i+1;r=j-1;
while (l<30 && r>=0){
if (p<c[l][r] || p>c[l][r]) sum++;
l+=1;r-=1;
}

public class Main { public static void main(String[] args) { Scanner s=new Scanner(System.in); char[][] c=new char[30][50]; // 将矩阵中的每一个元素转换成字符。 for (int i = 0; i < c.length; i++) { c[i]=s.nextLine().toCharArray(); } int sum=0; for (int i = 0; i < 30; i++) { // 行数控制 for (int j = 0; j < 50; j++) { // 列数控制 char p=c[i][j]; //同一行从左向右看,一行一行循环。 for (int l=j+1; l < 50; l++) { //(0,1),(0,2) if (p<c[i][l]) sum++; } //同一列从上往下看,一列 for (int l = i+1; l < 30; l++) { //(1,0)(1,1)(1,2) if (p<c[l][j]) sum++; } //45度右下看,一个位置一个位置与右下比较。 int l=i+1;int r=j+1; while (l<30 && r<50){ if(p<c[l][r]) sum++; //(1,1)(2,2)(3,3) l+=1;r+=1; } //45度左下到右上,从右上到左下,从左向右看,与从上向下看是两个顺序,不一样的,所以不能按照从左上到右下比较一个, l=i+1;r=j-1; while (l<30 && r>=0){ if (p<c[l][r] || p>c[l][r]) sum++; // l+=1;r-=1; } } } System.out.println(sum); } }
提示:理解的可能不对,请大佬批评指正,有没有更好的方法!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。