leecode第七十八题(子集)
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> bool_num;
vector<vector<int>> res;
int len=nums.size(); if(len==)//特殊情况处理
return res; for(int i=;i<len;i++)//建立一个全零,长度为len的数组,用于模拟二进制加法,其中的1提供索引位置
bool_num.push_back(); for(int i=;i<pow(,len);i++)
{
vector<int> item;
for(int j=;j<len;j++)//把不为0的数字推入一个崭新的item
{
if(bool_num[j]!=)
item.push_back(nums[j]);
}
res.push_back(item); bool_num[len-]+=;//模拟二进制加法,目的是遍历K位所有可能的取值
for(int j=len-;j>;j--)
{
if(bool_num[j]==)
{
bool_num[j]=;
bool_num[j-]+=;
}
else
break;
}
} return res;
}
};
分析:
这个算法本质是这样的:
给了一个K位的数组,他的组合应该是从
0: [NULL] [NULL] [NULL] ........ [NULL]
1: [num1] [num2] [num3] ........ [numK]
里面组合得到的。
文字描述:对每一个位置上可能选取0/1,分别代表空/实值,这样所有可能组合变为寻找K位二进制所有可能取值。
举例描述:有三位的【1,2,3】数组,我们遍历三位的二进制所有可能,其分别代表
000 []
001 [3]
010 [2]
011 [2,3]
100 [1]
101 [1,3]
110 [1,2]
111 [1,2,3]
然后我就一方面模拟二进制加法遍历K位所有可能,一方面根据当前二进制数索引并添加进res二维数组中。
这个想法不是一开始想到的,我本想按住第一位,用动态规划找后面所有可能,结果阴差阳错的想到的,没想到这么好使,希望我能在关键时候有这运气吧。
leecode第七十八题(子集)的更多相关文章
- leecode第一百四十八题(排序链表)
class Solution { public: void sort_list(ListNode* head1, ListNode* head2,int len)//在原链表上进行排序 { ListN ...
- 【leetcode 简单】 第七十八题 Nim游戏
你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函数,来判断你 ...
- 【20171026早】alert(1) to win - 第六、七、八题
早上7点起床,又写了一篇小说发在了起点网上,有兴趣的可以看看.点击这里 忙完后,继续练习,刚开始发现自己答题的速度有些慢,可能是因为对于html,javascript知识不是很精通,但是话又说回来,谁 ...
- Unity3D研究院之Jenkins的使用(七十八)
长夜漫漫无心睡眠,来一篇嘿嘿.我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins 怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内 ...
- (七十八)使用第三方框架INTULocationManager实现定位
前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...
- leecode第八十八题(合并两个有序数组)
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums ...
- leecode第七十题(爬楼梯)
class Solution { public: int climbStairs(int n) { vector<unsigned long long> num;//斐波那契数列 num. ...
- leecode第二百三十八题(除自身以外数组的乘积)
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...
- leecode第四十六题(全排列)
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int ...
随机推荐
- 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)
上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试. Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具.从Selenium 2.0开始Seleniu ...
- ORA-30377 MV_CAPABILITIES_TABLE not found
Cause: You have used the DBMS_MVIEW.EXPLAIN_MVIEW() API before you have defined the MV_CAPABILITIES_ ...
- IO流-基础
//创建输出流对象 FileWriter fw = new FileWriter("d:\\a.txt"); /* * 创建输出流对象做了哪些事情: * A:调用系统资源创建了一个 ...
- bzoj 1093 最大半连通子图 - Tarjan - 拓扑排序 - 动态规划
一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V ...
- django基础 -- 3. urls.py view.py 参数 别名 重定向 常用方法 静态文件
一.基本格式 from django.conf.urls import url from . import views #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数 ...
- Python3 tkinter基础 Label justify 多行字符串左对齐
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 转载:Systemd 服务配置文件
目录 一.开机启动 二.启动服务 三.停止服务 四.读懂配置文件 五. [Unit] 区块:启动顺序与依赖关系. 六.[Service] 区块:启动行为 6.1 启动命令 6.2 启动类型 6.3 重 ...
- 【入门】Gradle的基本使用、在IDEA中的配置、常用命令
一.介绍 java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说: 1. ant 功能虽然也很强 ...
- BZOJ4893: 项链分赃 && BZOJ4895: 项链分赃(增强版)
Solution 神仙题.jpg 切一刀简单啊,维护一个前缀和. 切两刀简单啊,拿个队列维护中间那一段. 切三刀,这tm什么毒瘤题. 于是打开题解:"保证不会答案不会超过宝石种类" ...
- dp专题练习
顺便开另外一篇放一些学过的各种dp dp总结:https://www.cnblogs.com/henry-1202/p/9194066.html 开坑先放15道题,后面慢慢补 目标50道题啦~~,目前 ...