字符串之间的比较,用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;