【九度】テーマ1388:階段を跳ぶ&&【LeetCode】Climbing Stairs
3600 ワード
1、【九度】題1388:ステップジャンプ時間制限:1秒メモリ制限:32メガ特殊判題:No提出:2435解決:995
タイトルの説明:
1匹のカエルは一度に1段の階段を飛び上がることも、2段を飛び上がることもできます.このカエルが1つのn級の階段を跳ぶことを求めて全部で何種類の跳び方があります.
入力:
入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力は整数n(1<=n<=70)を含む.
出力:
各テストケースに対応し、
出力カエルがn段の階段を飛び上がるのに何種類の飛び方があるのか.
サンプル入力:
5
サンプル出力:
8
質疑応答:
問題を解くのに問題がありますか.解題の心得を分かち合いますか?このトピックについては、次のトピックを参照してください.http://t.jobdu.com/thread-8111-1-1.html
【問題解きの考え方】
以下の説明は他の人が書いたものを参考にします.(住所:http://t.jobdu.com/thread-8111-1-1.html,name:acaiwlj)
*1.n=1の場合、ジャンプ法は1つしかありません.s=1です.
*2.n=2の場合、2つのジャンプ法があり、s=2である.
*3.n>2の場合、2つの分解方法があります.
*(1)最初に階段を飛び降りると、s(n)=s(n-1);
*(2)最初の次のステップの場合、s(n)=s(n−2);
*これにより、再帰式が得られます.
*s(n) = 1, n = 1;
*s(n) = 2, n = 2;
*s(n) = s(n-1) + s(n-1), n > 2;
注意:配列を使用したり、時間を空間的に交換したり、再帰を使用したりできますが、再帰が遅すぎると、多くの繰り返し計算が発生します.本題は配列を採用する.
実は結果はフィボナッチシーケンスで、結果はlong、intで溢れ出します.
Java AC
C++ AC
2、【LeetCode】Climbing Stairs
Total Accepted: 17976 Total Submissions: 53883 My Submissions
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Have you been asked this question in an interview?
Java AC 336ms
タイトルの説明:
1匹のカエルは一度に1段の階段を飛び上がることも、2段を飛び上がることもできます.このカエルが1つのn級の階段を跳ぶことを求めて全部で何種類の跳び方があります.
入力:
入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力は整数n(1<=n<=70)を含む.
出力:
各テストケースに対応し、
出力カエルがn段の階段を飛び上がるのに何種類の飛び方があるのか.
サンプル入力:
5
サンプル出力:
8
質疑応答:
問題を解くのに問題がありますか.解題の心得を分かち合いますか?このトピックについては、次のトピックを参照してください.http://t.jobdu.com/thread-8111-1-1.html
【問題解きの考え方】
以下の説明は他の人が書いたものを参考にします.(住所:http://t.jobdu.com/thread-8111-1-1.html,name:acaiwlj)
*1.n=1の場合、ジャンプ法は1つしかありません.s=1です.
*2.n=2の場合、2つのジャンプ法があり、s=2である.
*3.n>2の場合、2つの分解方法があります.
*(1)最初に階段を飛び降りると、s(n)=s(n-1);
*(2)最初の次のステップの場合、s(n)=s(n−2);
*これにより、再帰式が得られます.
*s(n) = 1, n = 1;
*s(n) = 2, n = 2;
*s(n) = s(n-1) + s(n-1), n > 2;
注意:配列を使用したり、時間を空間的に交換したり、再帰を使用したりできますが、再帰が遅すぎると、多くの繰り返し計算が発生します.本題は配列を採用する.
実は結果はフィボナッチシーケンスで、結果はlong、intで溢れ出します.
Java AC
import java.io.StreamTokenizer;
public class Main {
/*
* 1388
*/
public static void main(String[] args) throws Exception {
StreamTokenizer st = new StreamTokenizer(System.in);
long array[] = new long[80];
array[0] = 1;
array[1] = 2;
for (int i = 2; i < array.length; i++) {
array[i] = array[i-1] + array[i-2];
}
while (st.nextToken() != StreamTokenizer.TT_EOF) {
int n = (int) st.nval;
System.out.println(array[n-1]);
}
}
}
/**************************************************************
Problem: 1388
User: wzqwsrf
Language: Java
Result: Accepted
Time:70 ms
Memory:14532 kb
****************************************************************/
C++ AC
#include <stdio.h>
const int maxn = 72;
long array[maxn];
int n;
int main(){
while(scanf("%d",&n) != EOF){
if(n == 1){
printf("1
");
continue;
}
array[1] = 1;
array[2] = 2;
for(int i = 3; i < n + 1; i++){
array[i] = array[i-1] + array[i-2];
}
printf("%ld
", array[n]);
}
return 0;
}
/**************************************************************
Problem: 1388
User: wangzhenqing
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/
2、【LeetCode】Climbing Stairs
Total Accepted: 17976 Total Submissions: 53883 My Submissions
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Have you been asked this question in an interview?
Java AC 336ms
public class Solution {
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
int array[] = new int[n+1];
array[1] = 1;
array[2] = 2;
for(int i = 3; i < n+1; i++){
array[i] = array[i-1] + array[i-2];
}
return array[n];
}
}
Python AC 120ms class Solution:
# @param n, an integer
# @return an integer
def climbStairs(self, n):
if n == 1:
return 1
array = [0 for i in range(n+1)]
array[1] = 1
array[2] = 2
for i in range(3, n+1):
array[i] = array[i-1] + array[i-2]
return array[n]