70. Climbing Stairs
Example 2:
Input: 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step
方法一备忘录算法
int[] map = new int[400];
public int climbStairs(int n) {
if(n==1)return 1;
if(n==2)return 2;
if(map[n]!=0) return map[n];
map[n]= climbStairs(n-1)+climbStairs(n-2);
return map[n];
}
方法 2迭代法
public int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
int first = 1;
int second = 2;
int res=0;
for(int i=3;i<=n;i++)
{
res=first+second;
first=second;
second=res;
}
return res;
}
83. Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2 Output: 1->2
Example 2:
Input: 1->1->2->3->3 Output: 1->2->3
方法一
public ListNode deleteDuplicates(ListNode head) {
ListNode p=head;
ListNode res=new ListNode(-1);
res.next=head;
ListNode pre=head;
while(p!=null)
{
int temp=p.val;
while(p!=null&&p.next!=null&&p.next.val==temp)//如果当前值与下一个相同指针下移一位
{
p=p.next;
}
p=p.next;
pre.next=p;
pre=p;
}
return res.next;
}
改进
public ListNode deleteDuplicates(ListNode head) {
ListNode p=head;
while(p!=null)
{
if(p.next==null) break;
if(p.val==p.next.val)
{
p.next=p.next.next;
}
else
{
p=p.next;
}
}
return head;
}