leetcode剑指offer 简单题

05 替换空格

  • 获取String类的长度方法是string.length(),不是string.length
  • 定义一个 StringBuilder类不需要定义长度,直接StringBuilder s=new StringBuilder()
  • 对StringBuilder对象添加字符,用方法s.append(" "或char型)
  • StringBuilder类转换成String类,用方法s.toString()

06 从尾到头打印链表

  • 用数组输出链表需要注意:

    1.找到链表的长度len,用while(p!=null),用while(p)会报错——ListNode无法被转换为Boolean;
    2.遍历链表将值存入数组,res[i]=p.val,p=p.next,不要忘了后一句将p指针后移;

  • 用ListNode输出链表需注意:
    1.需要三个指针,一个是head,一个是newhead,一个是next;
    2.head和next用来遍历旧链表,newhead用来固定新链表的头部
    3.head和next对换实现头删旧链表作用,head和newhead对换实现新链表头插法。
    4.while(head!=null)
    {
    next=head.next;
    head.next=newhead;
    newhead=head;
    head=next;
    }

09.用两个栈实现队列

  • 思路
    在这里插入图片描述

  • 代码实现需注意的细节

// Stack的定义和初始化
Stack<Integer> stack1;
stack1=new Stack<>();

10-1斐波那契数列

  • 思路
    在这里插入图片描述

  • 代码实现需注意的细节

// 定义数组
int[] dp=new [n+1];
//题目要求对结果取模
 dp[i]=(dp[i-1]+dp[i-2])%1000000007;

10-2青蛙跳台阶问题

  • 思路
    在这里插入图片描述
  • 细节
    n=0时,有1种跳法。

11旋转数组的最小数字

  • 思路
    153题是原题,中等题,154题是延伸,简单题。(我猜分类好像反了吧,原题更简单一些)在这里插入图片描述
  • 细节
// 在划分区域时,mid在while循环外定义更省空间
//如果连用两个if,在153题数组无重复元素时能通过用例,但154题用if else更严谨
	int mid=0;
    while(low<high){
    
    
            mid=low+(high-low)/2;
            if(numbers[mid]<numbers[high]) high=mid;
            else if(numbers[mid]>numbers[high]) low=mid+1;
            else high--;
     }

猜你喜欢

转载自blog.csdn.net/keira674/article/details/115318925