题目如下 :
这一题我是这么解决的,设置三个一维数组,第一个和第二个保存对应位置上的左边最高的数字和右边最高的数字,第三个保存对应位置的数字大小,保存之后第i个位置的蓄水量就是Max(min(dp1[i],dp2[i])-num[i],0),然后累加就可以了,代码如下 :
public class Six {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] dp1 = new int[6];
int[] dp2 = new int[6];
int[] num = new int[6];
long result = 0;
String temp = "";
for(int i=10000;i<=999999;i++){
temp = i+"";
char[] item = temp.toCharArray();
//-----------------------------------------------找到左右最高点并且赋值到相应的数组的相应位置
for(int j=0;j<item.length;j++){
char left='0',right='0';
for(int k=j;k>=0;k--){
if(item[k]>left){
left = item[k];
}
}
dp1[j] = Integer.parseInt(left+"");
for(int k=j;k<item.length;k++){
if(item[k]>right){
right=item[k];
}
}
dp2[j] = Integer.parseInt(right+"");
num[j] =Integer.parseInt(item[j]+"");
}
//--------------------------------------------------把每个位置能放下的水量赋值到num数组中去
for(int j=0;j<item.length;j++){
int water = max(min(dp1[j],dp2[j])-num[j],0);
result += water;
}
}
System.out.print(result);
}
public static int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
public static int min(int a,int b){
if(a<b){
return a;
}else{
return b;
}
}
}