//此题最好理解可以使用动态规划,因为某次爬楼题可以爬两阶,也可以爬一阶,设爬楼梯总数为发f(x)所以爬楼的总数为f(x-1)+f(x-2),当要爬到台阶1的时候,只有一种方法,否则就返回刚才的动态转移方程f(x-1)+f(x-2),当然还可以用模拟,及滚动数组含义和动态规划一样,设总方法为r,而前面是两部之前的方法总数,和一步之前的方法总数,所以就有了 r = p + q;,然后数组往前移,将原本值替换成后面的,依次类推。
class Solution {
public int climbStairs(int n) {
return dbs(n);
}
private int dbs(int n){
if(n<=1){
return 1;
}
return dbs(n-1)+dbs(n-2);
}
}
83删除链表重复元素
//这题就不用说了找到节点删除就行
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head==null){
return null;
}
ListNode cur=head;
while(cur.next!=null){
if(cur.next.val==cur.val){
cur.next=cur.next.next;
}else{
cur=cur.next;
}
}
return head;
}
}