算法总结之 不重复打印排序数组中相加和为给定值的所有三元数组

 

这个问题跟上一个 大同小异,如何不重复打印呢? 

 首先保证选定三元数组中第一个值不重复,剩下的就跟前一个题目一样了。

 

package TT;

public class Test69 {

     public static void printUniqueTired(int[] arr, int k){
         
           if(arr==null || arr.length<3){
               return;
           }     
           for(int i =0; i<arr.length-2; i++){
               if(i==0 || arr[i] != arr[i-1]){
                   printRest(arr, i, i+1, arr.length-1, k-arr[i]);
               }
           }
         
     }
    
     public static void printRest(int[] arr, int f, int l, int r, int k){
         while(l<r){
             if(arr[l]+arr[r]<k){
                 l++;
             }else if(arr[l]+arr[r]>k) {
                 r--;
            }else{
                if(l==f+1 || arr[l-1] != arr[l]){  //f是用来做边界的控制问题解决
                    System.out.println(arr[f]+","+arr[l]+","+arr[r]);
                }
                l++;
                r--;
            }
         }
     }
    
    
     public  static void main(String[] args){
         
         int[] arr = new int[10];
            arr[0] = -8;
            arr[1] = -4;
            arr[2] = -3;
            arr[3] = 0;
            arr[4] = 1;
            arr[5] = 2;
            arr[6] = 4;
            arr[7] = 5;
            arr[8] = 8;
            arr[9] = 9;
            
            int k  = 10;
            printUniqueTired(arr, k);
         
     }
     
     
}

 

posted @ 2017-09-07 10:50  toov5  阅读(352)  评论(0编辑  收藏  举报