【C++ 】STL求全排列和组合

本文介绍了一种用C++实现的组合排列算法,名为GeoHash::Combine,通过递归和分治思想生成指定长度的组合,适用于数据压缩和地理编码。它从候选数列中生成所有可能的子集,用于5个元素的组合,并展示了代码实现细节。

排列组合 c++实现

// id 0-14 or 1-15 all nums chosed 5 groups
 std::vector<uint8_t> candidates = {14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
 std::vector<std::vector<uint8_t>> combines = Combine(candidates,5);


std::vector<std::vector<uint8_t>> GeoHash::Combine(std::vector<uint8_t> &combines,int size)
{
  std::vector<std::vector<uint8_t>> ret;
  if (combines.size() == size){
    ret.push_back(combines);
    return ret;
  }
  //out judge
  if (1 == size){
    for (auto &item : combines)
    {
      std::vector<uint8_t> vtTemp;
      vtTemp.push_back(item);
      ret.push_back(vtTemp);
    }
    return ret;
  }
  int i = 1;
  for (auto it = combines.begin(); it != combines.end() && (combines.size() - i) >= (size - 1);it++, i++)
  {
    if (it + 1 != combines.end())
    {
      std::vector<uint8_t> vtBack(it + 1, combines.end());
      std::vector<std::vector<uint8_t>> vtCombi1 = GeoHash::Combine(vtBack, size - 1);
      for (auto &item : vtCombi1)
      {
        item.push_back(*it);
      }
      ret.insert(ret.end(), vtCombi1.begin(), vtCombi1.end());
    }
  }
  return ret;
}

https://blog.youkuaiyun.com/tomwillow/article/details/81133932

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大江东去浪淘尽千古风流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值