LeetCode || Combinations

来源:互联网 发布:java同步互斥锁notify 编辑:程序博客网 时间:2024/06/11 17:53

Combinations

 Total Accepted: 51116 Total Submissions: 164526My Submissions

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]


主要思路:

模拟加法器。

算法时间: 8ms。

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<int> v;        vector<vector<int>> vc;                if(k > n || k < 1)            return vc;        for(int i = 1;i<=k;i++)        {            v.push_back(i);        }                vc.push_back(v);                        while(1)        {            if(v[k-1]+1 > n)//需要考虑进位的情况            {                int tmpi = 2;//表示数组v中倒数第tmpi位                                while(k-tmpi >=0)//从后往前寻找一个最合适的位置进行加1                {                    if(v[k-tmpi] < n - tmpi + 1) //如果当前位置合适的话                    //将[1, 4]变为[2, 3]的过程                    {                        v[k - tmpi] += 1;                                                int t1= v[k-tmpi] + 1;                        for(int i = k - tmpi+1;i<k;i++)                        {                            v[i] = t1;                            t1++;                        }                                                vc.push_back(v);                        break;                    }                    else //如果当前位置不合适,则需要继续往前数                        tmpi++;                }                                if(k < tmpi)//当进行到最前面那位都无法进行加法,则表示所有结果都已经被找到,停止搜索                    break;            }            else //如果最后一位持续符合要求            {                v[k-1] += 1;                vc.push_back(v);            }        }        return vc;    }};


0 0
原创粉丝点击