Given a non-repeating prime array arr, and each prime number is used at most once, find all the product without duplicate and sort them from small to large.

Notice
  • 2 <= |arr| <= 9
  • 2 <= arr[i] <= 23
Have you met this question in a real interview?

 
 
Example

Given arr = [2,3], return [6].

Explanation:
2 * 3 = 6.

Gven arr = [2,3,5], return [6,10,15,30].

Explanation:
2 * 3 = 6, 2 * 5 = 10, 3 * 5 = 15, 2 * 3 *5 = 30 网上的解法用到了位运算和哈希表来避免重复计算。简单说就是用一个int的各个位来表示当前数组各个素数取舍状态。把这个int值从1开始一直加到2^n即可遍历所有状态了。
不足之处是写起来略繁琐。
这个题目其实可以看作自底向上建立一棵二叉树。每处理一个数,可以看作将当前二叉树复制一份,将当前的数字和1分别作为两个子树的父节点。求积也就是把二叉树从根节点到子节点所有路径遍历一遍。
进一步可以看出,这个过程也就是把当前数字和已有的乘积乘一遍而已。
因为素数本身不能算作乘积,因此不能存在结果数组中,所以我们可以单独处理一遍两个素数相乘的情况,同样加入结果集里。 代码:
    vector<int> getPrimeProduct(vector<int> &arr) {
vector<int> ans;
for(size_t i = ; i < arr.size(); i++){
size_t len = ans.size();
for(size_t j = ; j < len; j++){
ans.emplace_back(arr[i] * ans[j]);
}
for(size_t j = ; j < i; j++){
ans.emplace_back(arr[j] * arr[i]);
}
}
sort(ans.begin(), ans.end());
return ans;
}

最新文章

  1. [AR]高通Vuforia Getting Started
  2. jquery删除添加输入文本框
  3. Python笔记(5)类__方法与继承
  4. js jQuery笔记
  5. 探索javascript----获得节点计算后样式
  6. Android-BaseLine基础性开发框架
  7. 第13章 使用Bind提供域名解析服务
  8. sql中实现split()功能
  9. Oracle数据库之二
  10. [每日一题] OCP1z0-047 :2013-08-26 TIMESTAMP WITH LOCAL TIME ZONE....................112
  11. 移植FastBlur模糊算法至SDL
  12. Struts2 中的数据传输
  13. 更改cmd语言(chcp)
  14. CI框架篇之预热篇(1)
  15. [USACO08NOV]奶牛混合起来Mixed Up Cows
  16. node.js fs.open 和 fs.write 读取文件和改写文件
  17. mysql 1055
  18. win10怎么查看进程
  19. Java 读取ANSI文件中文乱码问题解决方式[转]
  20. 关于Javascript闭包(Closure)

热门文章

  1. ZT 获得/修改共享互斥量属性:pthread_mutexattr_t
  2. ubuntu 14.04 配置 java 环境
  3. 两天学会css基础(一)
  4. javascript编译与运行机理(1)--
  5. 环境变量、block、修饰符:block对环境变量的引用和修改需要通过修饰符来限定
  6. BZOJ3208:花神的秒题计划Ⅰ(记忆化搜索DP)
  7. 【webpack】理解配置文件
  8. 9、Dubbo-配置(4)
  9. 进入WinRe(windows恢复环境)
  10. jQuery .attr()和.removeAttr()方法操作元素属性示例