91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-02 15:40:19 來源:腳本之家 閱讀:114 作者:橘子star 欄目:移動開發

前言

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

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

注意點:

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的小伙伴,點擊此處傳送 (本地下載)

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 阳原县| 商丘市| 芜湖县| 邹平县| 阳谷县| 乡宁县| 延边| 澄城县| 南平市| 涟水县| 古交市| 柳河县| 清水县| 信丰县| 宜良县| 桦南县| 新宁县| 墨竹工卡县| 大洼县| 利辛县| 桂东县| 韶山市| 平泉县| 承德市| 手游| 五峰| 得荣县| 铜梁县| 湘潭县| 宁化县| 汾阳市| 当雄县| 陆川县| 南雄市| 固阳县| 元谋县| 南召县| 兴海县| 贵溪市| 甘谷县|