算法日记 five

leetcode6  找规律

class Solution {
    public String convert(String s, int numRows) {
        
       if(s == null || s.length()==0 || numRows <=0)
            return "";
   if(numRows == 1)
            return s;
        
     StringBuilder result = new StringBuilder();
        int size = 2*numRows-2;
        for(int i = 0; i< numRows; i++) {
            for(int j = i; j< s.length(); j+=size) {
                result.append(s.charAt(j));
                if(i !=0 && i != numRows-1) { // if i is not the first and last row
                    int temp = j+size-2*i;
                    if(temp < s.length())  {
                        result.append(s.charAt(temp));
                    }
                }
            }
        }
        return result.toString();
    }
}

leetcode 指针类 16 3sum-closest

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        
         if (nums.length==0 ) return 0;
        Arrays.sort(nums);
        int result=nums[0]+nums[1]+nums[nums.length-1];
                        
         for(int i=0;i<nums.length-2;i++){
             if(i>0&&nums[i]==nums[i-1]) continue;
             int left=i+1;int right=nums.length-1;
             while(left<right){
                int sum=nums[i]+nums[left]+nums[right];
                if(sum==target) return target;
                if(Math.abs(result-target)>Math.abs(sum-target)) result=sum;
                if(sum>target) right--;
                if(sum<target) left++;
             }
         } 
        return result;
    }
    
}

leetcode24  交换节点,重点是指针的交换,只有指针(额外设的)指向链表的相应位置,并且注意交换条件

class Solution {
    
        public ListNode swapPairs(ListNode head) {
        
        if(head==null)
            return null;
        
        //表头节点,默认链表中的数据都为正数
        ListNode preHead = new ListNode(-1);
        preHead.next=head;
       
        ListNode left=preHead;
        ListNode mid=head;
        if(head.next==null)               //如果只有一个节点,直接返回这个节点
            return head;
        ListNode right=head.next;
        
        while(mid!=null && mid.next!=null){
            
            mid.next=right.next;     //交换节点的过程
            right.next=mid;
            left.next=right;
           
            left=mid;                //移动节点的过程
            mid=left.next;
            if(mid!=null)            //注意细节:首先要保证mid不为null,才能将mid.next赋值给right。
                right=mid.next;
          
            
        }
        
        return preHead.next;
        
    }    
    
}

leetcode 58:这个题目恶心在空格可能在每个位置,顺便复习String的方法

class Solution {
    public int lengthOfLastWord(String s) {
        return s.trim().length()-s.trim().lastIndexOf(" ")-1;
    }
}



        if(s.length()==0) return 0;
        String [] str=s.trim().split(" ");
        return str[str.length-1].length();


leetcode73 二维矩阵的用法

class Solution {
    public void setZeroes(int[][] matrix) {
       //从某一行或者某一列入手
       boolean rowFlag=false,colFlag=false;
       //第一行是否含零
       for(int col=0;col<matrix[0].length;col++){
            if(matrix[0][col]==0){
            rowFlag=true;
            break;
           }
       }
        //第一列是否含零
        for(int row=0;row<matrix.length;row++){
            if(matrix[row][0]==0){
                colFlag=true;
                break;
            }
        }
        for(int col=1;col<matrix[0].length;col++){
            for(int row=1;row<matrix.length;row++){
                if(matrix[row][col]==0){
                    matrix[0][col]=0;
                    matrix[row][0]=0;
                }            
            }        
        }
       for(int col=1;col<matrix[0].length;col++){
            if(matrix[0][col]==0){
               for(int row=1;row<matrix.length;row++){
                   matrix[row][col]=0;                   
               }          
            }      
       }
        
    for(int row = 1;row < matrix.length;row++){
            if(matrix[row][0] == 0){
                for(int col = 1;col < matrix[0].length;col++){
                    matrix[row][col] = 0;
                }
            }
        }
      //第一行置零
        if(rowFlag == true){
            for(int col = 0;col < matrix[0].length;col++){
                matrix[0][col] = 0;
            }
        }
        //第一列置零
        if(colFlag == true){
            for(int row = 0;row < matrix.length;row++){
                matrix[row][0] = 0;
            }
        }
       
    }
}

leetcode74

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
       if (matrix == null || matrix.length == 0){
            return false;
        }
        int targetrow=0;
        boolean flag=false;
        //判断在哪一行
        
        int rowLen =matrix[0].length;
         if (rowLen == 0) {
            return false;
        }
        for(int row=0;row<matrix.length;row++){
            if (target <= matrix[row][rowLen - 1]) {
                targetrow = row;
                break;
            }
        }
        //判断在哪一列
        for(int col=0;col<matrix[0].length;col++){
            if(matrix[targetrow][col]==target){
               flag=true;
            }
        }
      return flag;
    }
}

leetcode 240 

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
       
     if (matrix.length==0)
            return false;
        int i = matrix.length-1,j=0;
        while(i>=0 && j<matrix[0].length){
            if (matrix[i][j] == target)
                return true;
            else if(matrix[i][j]>target)
                i--;
            else if(matrix[i][j]<target)
                j++;
        }
        return false;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值