leetcode_前期心得

字符串之间的比较,用equals,不能直接用==,否则会因为地址的不同而被认为两个内容一样的字符串是不一样的。

 

binary research:

public class Solution extends VersionControl {

    public int firstBadVersion(int n) {

        int low=1;

        int high=n,medium;

        if(isBadVersion(1)){

            return 1;

        }

        else{

                while(low+1!=high)

                {

                    medium=low+(high-low)/2;//这个比使用除法来的快

                    if(isBadVersion(medium)){

                        high=medium;

                    }

                    else{

                        low=medium;

                    }

                }

                if(high>n||(!isBadVersion(high)))//这个判断方式让速度更快

                    return -1;

                return high;

            }

    }

}

二分查询优化:http://www.doc88.com/p-6961125561904.html

 

 

寻找只含有2,3,5三个质因子的正整数(称之为ugly number)。

质数:一个大于1的自然数,除了1与其自身外,不能被其他整数整除,称为质数

(也称素数)。否则称为合数。

质因子:一个因子,同时这个因子是质数。

8: 是ugly number,8的因子:1,2,4,8。

4与8都不是质数,不是质因子。2是质因子。最小质数为2,所以1也不是质因子。

public class Solution {

    public boolean isUgly(int num) {

        if (num==0)

            return false;

        else {

            while(num!=1)

            {

                if(num%2==0)

                num/=2;

                else if(num%3==0)

                num/=3;

                else if(num%5==0)

                num/=5;

                else break;

            }

            if(num==1)

                return true;

            else return false;

        }

    }

}

 

 

对于stringbuffer的如下函数:

setCharAt(int index, char ch)
          The character at the specified index is set to ch.

表示将stringbuffer中的特定索引处的值设置为ch。前提是调用该函数的stringbuffer在当前索引处本身就有一个值。否则报错!

 

public static void main(String[] args) {

      // TODO Auto-generated method stub

      ListNode listNode=new ListNode(0);

      ListNode result=listNode;

         for(int i=1;i<4;i++){

         System.out.println("进入循环");

         result =new ListNode(i);

         System.out.println("创建"+i+"新节点完毕");

         result=result.next;

      }

      while(listNode!=null){

         System.out.println(listNode.val);

         listNode=listNode.next;

      }

     

   }

 

public class ListNode {

   int val;

   ListNode next;

   ListNode(int x) { val = x; }

}

//上述代码运行后,发现打印结果是0.

初始将listNode赋值给result,之后result不断改变,最后从result头结点处遍历节点链表。然而由于在循环体内部result被重新创建,导致result不再是与listNode一样的值,所以打印结果只有listNode本身的0值。

所以:循环体内应该改成:result.next= new ListNode(i);

********************************

result.next=new ListNode(i);

System.out.println("创建"+i+"新节点完毕");

result=result.next;

***********************************

有人认为发生了两次next。第一行的next仅仅是赋值作用,result并没有真正的到了next的位置,在第二次才将指针做了后移操作。

 

我的代码:

*************************************************************

public class Solution {

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

            ListNode result=null;

               if(l1==null){

                   return l2;

               }

               if(l2==null){

                   return l1;

               }//对于两者有空的情况讨论

               if(l1.val<=l2.val){

                   result=l1;//给result赋值,确定哪个是头结点

                   l1=l1.next;

               }else{

                    result=l2;

                    l2=l2.next;

               }           

               ListNode result1=result;//指向头结点

               while(l1!=null&&l2!=null){

                   if(l1.val<l2.val){

                       //把l1的值放到result中

                       result1.next=l1;

                       result1=result1.next;//这句是把指针移到刚刚更改过的那                                                                    个位置

                       //把l1的值往后放

                       l1=l1.next;

                   }else{

                       result1.next=l2;

                          result1=result1.next;

                          l2=l2.next;

                   }              

               }

               //判断是哪个先成为空

               if(l1==null){

                   result1=l2;

               }

               result1=l1;

               return result;

    }

}

**************************************************

if(l1==null){

       result1=l2;

       }

result1=l1;

这段出了问题:改成如下:

********************************

if(l1==null){

       result1.next=l2;

       }

if(l2==null){

       result1.next=l1;

       }

************************************

或者:

result1.next=l1==null?l2:l1;

 

你可能感兴趣的:(leetcode_前期心得)