leetcode

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> iListList= new ArrayList<List<Integer>>();
        int depth=0;
        exploreTreeNode(root,iListList,depth );
        return iListList;
        
    }
    
    public void exploreTreeNode(TreeNode root, List<List<Integer>> iListList, int depth){
        
        if(root==null) return;
        if( depth >= iListList.size() ){
            List<Integer> iList = new ArrayList<Integer>();
            iListList.add(depth, iList);
            iList.add(root.val);
        }
        else{
            iListList.get(depth).add(root.val);
        }
        if(null!=root.left){
           exploreTreeNode(root.left, iListList , depth+1); 
        }
        if(null!=root.right){
           exploreTreeNode(root.right, iListList , depth+1); 
        }
    }
    
}

 

public class Solution {
    
     private int getPivot(int[] nums){
      
      //System.out.println("start:"+start+"end:"+end);
      
      if(nums[0]<nums[nums.length-1]){
          return -1;
      }
      
      if(nums.length <=1){
          return 0;
      }
      
      int start=0;
      int step=2;
      
      while(true){
          step=2;
          if(nums[start]>nums[start+step-1]){
              return start+step-1;
          }
          while(step<=nums.length){
              if((nums[start]>nums[start+step-1])
                      ||(nums[start]>nums[nums.length-1])){
                  start=start+(step/2);
                  break;
              }
              step=step*2;
              //System.out.println(step);
          }
          
      }
      
  }
  
  private int getTarget(int[] nums, int start, int end, int target){
      int middle=(start+end)/2;
      if(nums[middle]==target) {
          return middle;
      }
      if((start==end)&&(nums[middle]!=target)){
          return -1;
      }
      if(target<nums[middle]){
          return getTarget(nums,start, middle , target);
          
      }else{
          return getTarget(nums,middle+1, end , target);   
      }
      
      //return 0;
  }
  
  public int search(int[] nums, int target) {
      
      if(nums.length<=0){
          return -1;
      }
      int pivot=getPivot(nums);
      //System.out.println("pivot:"+pivot);
      
      if(pivot==-1){
          return getTarget(nums,0, nums.length-1,target);
      }
      
      int start=0;
      int end = nums.length-1;
      int tempPivot=pivot;
      tempPivot=((tempPivot-1)>=0)?(tempPivot-1):tempPivot;
      if((target>=nums[0])&&(target<=nums[tempPivot])){
          return getTarget(nums,0,tempPivot, target);
          
      }
      else{
          return getTarget(nums,pivot,end, target);
      }
      
      //return 0;
  }
}

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        ListNode listNode= new ListNode(0);
        listNode.next=null;
        ListNode headNode=null;
        int temp1=0;
        int temp2=0;
        headNode=listNode;
        ListNode tempNode;
        
        int oneAdd=0;
        while(true){
            if((l1==null)&&(l2==null)){
                break;
            }
            
           
            temp1=(l1==null)?0:l1.val;
            temp2=(l2==null)?0:l2.val;
            
             //System.out.println("total"+temp1+temp2+oneAdd);
            
            if((temp1+temp2+oneAdd)>=10){
             
           
             listNode.val=(temp1+temp2+oneAdd)-10;
             oneAdd=1;
            }
            else{
                
                listNode.val=(temp1+temp2+oneAdd);
                oneAdd=0;
            }
           
            //System.out.println("val:"+listNode.val);
            
            if(l1!=null){
                //System.out.println("l1:"+l1.val);
                l1=l1.next;
            }
            if(l2!=null){
                 //System.out.println("l2:"+l2.val);
                l2=l2.next;
            }
            if(!((l1==null)&&(l2==null))){
                //System.out.println("add new node");
                tempNode=new ListNode(0);
                listNode.next=tempNode;
                listNode=listNode.next;
                listNode.next=null;
            }
        }
        if(oneAdd>0){
            tempNode=new ListNode(1);
            listNode.next=tempNode;
            listNode=listNode.next;
            listNode.next=null;   
        }
        
        return headNode;
    }
}

 

public class Solution {
    public String longestPalindrome(String s) {
        int start=0;
        int end=0;
        int orderP=0;
        int reverseP=s.length()-1;
        int tempOrderP;
        int tempEnd=0;
        if(s.length()==1){
            return s.substring(0,1);
        }
        
        while(orderP<s.length()){
            reverseP=s.length()-1;
            tempOrderP=orderP;
            //System.out.println("tempOrderP begin:"+tempOrderP);
            while(true)
            {
            tempOrderP=orderP;    
            while(reverseP>tempOrderP){
                if(s.substring(tempOrderP,tempOrderP+1).equals(s.substring(reverseP,reverseP+1))) break;
                else
                   reverseP--; 
            }
            tempEnd=reverseP;
            while(reverseP>tempOrderP){
                if(s.substring(tempOrderP,tempOrderP+1).equals(s.substring(reverseP,reverseP+1)) == false) break;
                else{
                    reverseP--;
                    tempOrderP++;
                }
                    
            }
            if(reverseP<=tempOrderP){
                if((tempEnd-orderP)>(end-start)){
                    start=orderP;
                    end=tempEnd;
                    //System.out.println("start :"+start);
                    //System.out.println("end :"+end);
                    
                }
                break;
                
            }else{
               reverseP=tempEnd-1;
               //System.out.println("reverseP :"+reverseP);
               
            }
            
            }
            orderP++;
            
        }
        
        if(start==end){
            return s.substring(0,1);
        }else{
            return s.substring(start,end+1);
        }
        
        
    }
}

 

public class Solution {
    public String convert(String s, int numRows) {
        ArrayList<String> sArrayList= new ArrayList<String>();
        
        if((s.length() <= numRows) ||(numRows==1) ){
            return s;
        }
        
        int i=0;
        while(i<numRows){
            sArrayList.add(new String(s.substring(i,i+1)));
            i++;
        }
        
        int column=1;
        int columnMax=0;
        int columnMaxPrev=0;
        String tempStr=null;
        
        while(i<s.length()){
            if(column%2==1){
                if(i>columnMax){
                    columnMax=(i+numRows-1-1);
                }
                
                tempStr=sArrayList.get(columnMax-i)+s.substring(i,i+1);
                sArrayList.set(columnMax-i,tempStr);
                //sArrayList.get(columnMax-i)=sArrayList.get(columnMax-i);//+s.substring(i,i+1);
                i++;
                if(i>columnMax){
                   column++; 
                }
                
            }
            else{
                tempStr=sArrayList.get(i-columnMax)+s.substring(i,i+1);
                sArrayList.set(i-columnMax,tempStr);
                //sArrayList.get(i-columnMax)=sArrayList.get(i-columnMax)+s.substring(i,i+1);
                i++;
                if(i>(columnMax+numRows-1)){
                    column++;
                }
            }
            
        }
        String strResult=new String("");
        Iterator iterSArrayList=sArrayList.iterator();
        while(iterSArrayList.hasNext()){
            strResult=strResult+iterSArrayList.next();
        }
        
        return strResult;
     
    }
}

 

posted @ 2017-02-18 12:05  友哥  阅读(156)  评论(0编辑  收藏  举报