麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

iOS中排列組合算法的使用小結

2019-10-21 18:39:47
字體:
來源:轉載
供稿:網友

前言

最近在項目中用到了排列組合計算,雖然比較簡單,但是整個學習過程還是要記錄下來的,以便以后可以吸取經驗。

一般來說,排列組合就等于搜索。

注意點:

1.去重復:規定子集順序必須升序;

2.候選數組的結果處理。必須深拷貝,否則最后的結果集里全是空的(加了一堆指針)。

3.在寫遞歸的時候(DFS:深度優先搜索),思路是先把以 1 開頭的都找出來,再把 2 開頭的都找出來 …… 所有在遞歸之前做過的事情,之后都要把它抹回來。遞歸做的事情能一句話描述清楚。遞歸就是不斷地把規模變小,但是都做的一件事情。

方法如下:

最開始的思路是用階乘去解決排列組合的問題,所以就想到了遞歸。

long arithmetic(int n){ if (n>1) { return n*arithmetic(n-1); }else if (n == 1){ return 1; }else{ return 1; }}

但是遞歸的話,有一個弊端,數字達到一定程度的時候,它會出現值越界的情況,就算是用long long類型,也還是會出現越界的情況。所以用階乘的這種方式,被暫時擱置。

想到的第二種思路是用for循環去解決問題。僅僅只用到排列這種算法,階乘還是非用不可得,但是就組合而言,完全可以換另一種方式去解決。

解決的思路就是為了不讓數字值越界,可以讓分子和分母約分后,再乘下一個分子,再和分母約分。以此類推。話不多說,直接上代碼:

/** 雙色球 普通選注 */- (long)lotterySSQPTRecursiveWithRedBalls:(NSUInteger)redBalls blueBalls:(NSUInteger)blueBalls{ if (redBalls > 5 && blueBalls > 0) { if (redBalls == 6) {  return blueBalls; }else{  NSUInteger count = (redBalls-6 > 6) ? 6 : redBalls-6;  long number = 1;  long molecular = 1;  long denominator = 1;  for (int i = 0; i < count; i++) {  molecular = molecular*(redBalls-i);  denominator = denominator * (i+1);  number = (molecular*number)/denominator;  molecular = 1;  denominator = 1;  }  number = number*blueBalls;    return number; } }else{ return 0; }}

相比于直接用階乘,個人覺得還是for循環更好一些。如果有什么更好的解決思路,歡迎各位留言!

想要看Demo的小伙伴,點擊此處傳送

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中国免费一级毛片 | 一区二区国产在线 | 国产一级二级毛片 | 成人午夜视屏 | 久久精国| 免费人成年短视频在线观看网站 | 黄色免费小视频网站 | 精品一区免费 | 欧美成人亚洲 | 18欧美性xxxx极品hd | 狼人狠狠干 | 国产精品99久久免费观看 | 亚洲第一页在线观看 | 黄色片在线播放 | 久久综合婷婷香五月 | 欧美视频99| 久久影片| 日本黄色免费观看视频 | 黄色大片在线观看 | 全黄性性激高免费视频 | 亚洲国产精品一区二区精品 | 国产日韩在线观看视频 | h网站在线观看 | 毛片一级免费看 | 51国产偷自视频区视频小蝌蚪 | 99精品国产小情侣高潮露脸在线 | 国产精品视频免费在线观看 | 欧美精品网址 | 法国极品成人h版 | 色域tv | 国产精品久久久久久久久久电影 | 青青青在线免费 | 天天干天天碰 | 久久久国产一级片 | 狠狠干天天 | omofun 动漫在线观看 | 成人午夜影院 | 久久成人国产精品入口 | 国产一区二区三区网站 | 久久草在线看 | 免费观看一级黄色片 |