国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++編程練習問題匯總--程序員面試寶典+劍指offer

2019-11-08 19:57:58
字體:
來源:轉載
供稿:網友

這里寫代碼片// 某編程網站上編程練習題,遇到的問題匯總 2017年2月15日 1、題目描述:上階梯 有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階、2階、3階。請實現一個方法, 計算小孩有多少種上樓的方式。為了防止溢出,請將結果Mod 1000000007 給定一個正整數int n,請返回一個數,代表上樓的方式數。保證n小于等于100000。 我的解決方法:

“` int countWays(int n) { if(n==1){return 1;} if(n==2){return 2;} if(n==3){return 4;} if(n>3){ return countWays(n-1)+ countWays(n-2)+countWays(n-3);} }

測試不通過,因為運行時間不達標。因為,每次計算countWays(n)都需要重新計算前面的countWays(n-1)+countWays(n-2)+countWays(n-3); 就是說計算countWays(5)、countWays(6)等每次都需要重新算。方法一,用數組,數組里面的值,每計算一次,就有了,會保存下來,所以計算了countWay(4)后就不需要計算了,每次都只需要計算新的一個值。另外需要注意,數組類型如果是int ,要防止其越界。遞歸這個玩意,到底什么時候用呢? 困惑中下面是用迭代數組的方式進行的: int countWays(int n) { long long a[10000]; if(n<0){return 0;} a[0]=1; a[1]=2; a[2]=4; for(int i=3;i<=n-1;i++) { a[i] = ((a[i-1]+ a[i-2])%1000000007+a[i-3])%1000000007; } return a[n-1];如下的方法也可以:

class GoUpstairs { public: int countWays(int n) { // write code here int f1=1; int f2=2; int f3=4; int result=0; if(n<=0) return 0; if(n==1) return 1; if(n==2) return 2; if(n==3) return 4; for(int i=4;i<=n;i++) { result=((f3+f2)%1000000007+f1)%1000000007; f1=f2; f2=f3; f3=result; } return result; } }; “`


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 丰城市| 关岭| 临猗县| 霍州市| 北安市| 建湖县| 那坡县| 安图县| 会理县| 北安市| 静宁县| 清苑县| 东阳市| 淮北市| 怀安县| 咸丰县| 连州市| 公安县| 会泽县| 永吉县| 六盘水市| 城步| 石渠县| 阿坝县| 新沂市| 麦盖提县| 鹤庆县| 融水| 东平县| 龙陵县| 惠安县| 武胜县| 崇州市| 西青区| 泉州市| 祁连县| 温州市| 大邑县| 宝鸡市| 隆尧县| 开鲁县|