Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Have you met this question in a real interview?
Yes
No
int getLastLetterIndex(vector<int> &S, vector<int> &curVector)
{
int lastIndex = -1;
if (curVector.size() == 0)
return lastIndex;
int lastLetter = curVector.at(curVector.size()-1);
for (int i=0; i<S.size(); i++)
{
if (S.at(i) == lastLetter)
{
lastIndex = i;
break;
}
}
return lastIndex;
}
vector<vector<int> > subsets(vector<int> &S) {
sort(S.begin(), S.end());
vector<vector<int> > retVector;
vector<int> curVector;
retVector.push_back(curVector);
int curIdx = 0;
while (curIdx != retVector.size())
{
vector<int> curVector = retVector[curIdx];
int loopIdx = getLastLetterIndex(S, curVector);
for(int i=loopIdx+1; i<S.size(); i++)
{
vector<int> newVector = curVector;
newVector.push_back(S.at(i));
//print (newVector);
retVector.push_back(newVector);
}
curIdx++;
}
return retVector;
}