題目如下 :
這一題我是這麼解決的,設置三個一維數組,第一個和第二個保存對應位置上的左邊最高的數字和右邊最高的數字,第三個保存對應位置的數字大小,保存之後第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;
}
}
}