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--;
}