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 ...
随机推荐
- IntelliJ IDEA. Debug模式
资料收集: https://www.bilibili.com/video/av6749471/?p=16 eclipse debug模式. 基础 Intellij Idea--Debug使用 Inte ...
- selenium自动化之鼠标操作
在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChai ...
- Baidu WebFE(FEX)团队开发 的 文件上传插件 WebUploader
1.webUploader官网下载地址:http://fex.baidu.com/webuploader/ 直接下载代码,运行examples目录文件即可 2.webUploader上传demo:ht ...
- Golang两种执行流程以及区别
Go语言的执行方式有两种,一种是编译后再执行,另一种直接go run执行. 一.先编译后执行 .go文件(源代码)--->go build指令把源代码编译(如果是windows下会编译出一个.e ...
- CC攻击介绍及如何防御
CC攻击介绍 CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法.攻击者借助代理服务器生成指向受害主机的合 ...
- Io流的使用
file的使用 文件流的使用 FileInpunStream FileOutOputStream ----------字符流 FileReader Filewriter --------字节流 ...
- javaweb三大框架和MVC设计模式
javaweb三大框架和MVC设计模式 转载,原文请见https://blog.csdn.net/sunpeng19960715/article/details/50890705 一.MVC设计模式 ...
- SQL 基础语法笔记教程整理
最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...
- c# 之 事务
SqlTransaction事务的简单例子 { DataTable dt = new DataTable(); System.Data.SqlClient.SqlConnection cnn = ne ...
- C# winform combobox默认选中项方法
https://blog.csdn.net/easyboot/article/details/68062196 可以使用 Combobox.SelectText = “默认选中文本”; 但是如果Com ...