數字接水java實現

題目如下 :

    

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

}

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章