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