大厂面试:排列与组合傻傻分不清楚

liftword5个月前 (02-08)技术文章39

一、概念

以a、b、c三个字符来举例。

1)排列:全排列即字符不能重复,第一位有3种选择,第二位有2种选择,第三位有1种选择,所以最后有3*2*1=6种结果。

2)组合:组合不要求三个字符都必须加入结果。

求所有组合也就是abc各个位是否选取的问题,第一位2种可能,第二位2种可能,以此类推,一共有2^n种可能。用0表示不取,1表示选取,这样可以用110这样的形式表示ab。

abc一共的表示形式从0到2^3-1。然后按位与运算,如果结果为1就输出当前位,为0则不输出。


二、代码

1)排列

public class Permutation {
  public static void main(String[] args) {
    char[] array = {'a','b','c'};
    backtrace(array, 0, array.length);
  }
  public static void backtrace(char[] array, int start, int len){
    if(start == len-1){
      for(int i=0; i


2)组合

public class Combination {
  public static void main(String[] args) {
    //待组合的元素
    char[] array = {'a','b','c'};
    //调用获取组合结果函数
    combination(array);
  }
  //求组合结果
  public static void combination(char[] array) {
    int len = array.length;
    //临时变量从0到nbits-1
    int nbits = 1 << len;
    for (int i = 0; i < nbits; ++i) {
    int t;
    for (int j = 0; j < len; j++) {
      t = 1 << j;
      //若t和i的字符相与不为0,则取j位置的字符
      if ((t & i) != 0) {
        System.out.print(array[j]);
      }
    }
    System.out.println();
    }
  }
}




致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。

若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢。您的支持是我们为您提供帮助的最大动力。

相关文章

用python开发一个炸金花小游戏,注意别玩上瘾了

大家好,我是才哥。众所周知?扑克牌可谓是居家旅行、桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则。炸(诈)金花又叫三张牌,是在全国广泛流传的...

python算法基础之回溯_python 回测代码

回溯法定义回溯法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条...

用Python制作炫酷的专属二维码_python简单二维码生成代码

点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍,小窗口回复“资源”、“测试工具包”领取测试资源。本文5586字,阅读约需14分钟Hi,大家好。在此之前介绍过二维码如何测试:你...

python自动化测试实例—保险测试场景中的应用

最近公司做保险项目的测试,发现保险测试是一件非常繁琐的事情,特别是保费那块。遇到的保险场景是这样的:要测一款重疾险,不同年龄段的人保费会不相同,有或是没有社保,保费不相同,还有各种附加险选择买或者是不...

12岁男孩一个暑假卖NFT「表情包」赚了250万

梦晨 发自 凹非寺量子位 报道 | 公众号 QbitAI12岁男孩在暑假里画了一系列画,在区块链上以NFT的形式出售,赚到的虚拟货币价值相当于250万人民币!这些画倒也不是什么精致的艺术品,只是一系列...

过年打麻将,只要掌握这点概率学原理,你能多胡好几盘

特别声明:本文为新华网客户端新媒体平台“新华号”账号作者上传并发布,仅代表作者观点,不代表新华号的立场及观点。新华号仅提供信息发布平台。明天就是除夕了,春节就在眼前,独乐乐不如众乐乐。如果要选择一种声...