爱六合婵机吧

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 537|回复: 0
打印 上一主题 下一主题

[php]m个数取n个,每一位不重复组合

[复制链接]

61

主题

61

帖子

396

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
396
跳转到指定楼层
楼主
发表于 2018-5-23 14:36:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
拿去不谢!


  1. //m个数取n个,每一位不重复组合
  2. $set = range(1, 11);
  3. $timeStart = microtime(true);
  4. print_r(getSetDiffNumber($set, 5));
  5. $timeEnd = microtime(true);
  6. echo '运行时间:'.($timeEnd - $timeStart);

  7. function getSetDiffNumber($set, $num){
  8. ? ? $set = array_values(array_unique($set));
  9. ? ? if($num <= 1){
  10. ? ?? ???return $set;
  11. ? ? }
  12. ? ? if($num > count($set)){
  13. ? ?? ???return 'error:$num值大于$set元素';
  14. ? ? }

  15. ? ? $numSet = count($set) - 1;
  16. ? ? for ($i = 0; $i < $num; $i++) {
  17. ? ?? ???$setpSet[$i] = 0;
  18. ? ? }
  19. ? ? while (true) {
  20. ? ?? ???for ($i = ($num - 1); $i >= 0 ; $i--) {
  21. ? ?? ?? ?? ?if($setpSet[$i] > $numSet){
  22. ? ?? ?? ?? ?? ? $setpSet[$i] = 0;
  23. ? ?? ?? ?? ?? ? $setpSet[$i - 1]++;
  24. ? ?? ?? ?? ?}
  25. ? ?? ?? ?? ?if($i - 1 == 0 && $setpSet[$i - 1] > $numSet){
  26. ? ?? ?? ?? ?? ? return $newSet;
  27. ? ?? ?? ?? ?}
  28. ? ?? ???}
  29. ? ?? ???$check = [];
  30. ? ?? ???for ($i = ($num - 1); $i >= 0 ; $i--) {
  31. ? ?? ?? ?? ?$check[$setpSet[$i]] = 0;
  32. ? ?? ???}
  33. ? ?? ???if(count($check) < $num){
  34. ? ?? ?? ?? ?$setpSet[$num - 1]++;
  35. ? ?? ?? ?? ?continue;
  36. ? ?? ???}
  37. ? ?? ???$numArr = [];
  38. ? ?? ???for ($i = 0; $i < $num ; $i++) {
  39. ? ?? ?? ?? ?$numArr[] = $set[$setpSet[$i]];
  40. ? ?? ???}
  41. ? ?? ?? ?? ?$newSet[] = implode(',', $numArr);
  42. ? ?? ???$setpSet[$num - 1]++;
  43. ? ? }
  44. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|爱六合婵机吧

GMT+8, 2019-9-25 21:51六合婵机 , Processed in 0.103794 second(s), 21 queries .

Powered by Discuz! X3.4

? 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表