Jerry's Blog

Recording what I learned everyday

View on GitHub


10 July 2019

Angular (26) -- Dynamic Components

by Jerry Zhang

LeetCode Day 5: P70. Climbing Stairs (Easy)

题目

爬楼梯,每次上一阶或者两阶,一共有n级楼梯。那一共有多少种不同的方法上到顶?

我的思路:

动态规划的题,因为每次上一梯还是两梯,就决定了后面还剩下多少梯。如果能从一梯开始记录下一共有多少种方法,那只需要看还剩下多少级,就 知道了再乘以多少种方法。

我的算法:

记录每层的方法数,每增加一级楼梯,其实就是前一级的方法数加上前两级的方法数。做到最后才发现其实就是个斐波那契数列-.-

以n为长度建一个数组,当n等于1或者2时,直接返回。当n大于2以后,后每数都是前两个数的和。

我的代码:

public class E_70_ClimbingStairs {

    public static int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        int[] ways = new int[n];
        ways[0] = 1;
        ways[1] = 2;
        for (int i = 2; i < n; i++) {
            ways[i] = ways[i - 1] + ways[i - 2];
        }
        return ways[n - 1];
    }

    public static void main(String[] args) {
        System.out.println(climbStairs(5));
    }

}

又超过了100%的解法。。。鼓掌!哗!!!

最优解法:(就是我这种方法)

class Solution {
    public int climbStairs(int n) {
        if(n==0 || n==1 || n==2) return n;
        int[] mem=new int[n];
        mem[0]=1;
        mem[1]=2;
        for(int i=2;i<n;i++){
            mem[i]=mem[i-1]+mem[i-2];
        }
        return mem[n-1];
    }
}

一开始我把前两级的台阶数乘以2了,测试时发现,那就重复计算了。

Angular

Alert Component

<div class="backdrop" (click)="onClose()"></div>
<div class="alert-box">
  <p></p>
  <div class="alert-box-actions">
    <button class="btn btn-primary" (click)="onClose()">Close</button>
  </div>
</div>
@Component({
  selector: 'app-alert',
  templateUrl: './alert.component.html',
  styleUrls: ['./alert.component.css']
})
export class AlertComponent {
  @Input() message: string;
  @Output() closeAlert = new EventEmitter<void>();

  onClose() {
    this.closeAlert.emit();
  }
}
.backdrop {
  position: fixed;
  top: 0px;
  left: 0px;
  width: 100vw;
  height: 100vh;
  background: rgba(0, 0, 0, 0.75);
  z-index: 50;
}

.alert-box {
  position: fixed;
  top: 30vh;
  left: 20vw;
  width: 60vw;
  padding: 16px;
  z-index: 100;
  background: white;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
}

.alert-box-actions {
  text-align: right;
}
<app-alert
      [message]="error"
      *ngIf="error"
      (closeAlert)="onHandleError()"></app-alert>
onHandleError() {
    this.error = null;
  }
tags: Angular