C++ next_permutation

數組的全排列。ios

題目:從新排序獲得2的冪。數組

從正整數 N 開始,咱們按任何順序(包括原始順序)將數字從新排序,注意其前導數字不能爲零。oop

若是咱們能夠經過上述方式獲得 2 的冪,返回 true;不然,返回 falsespa

包含在頭文件<algorithm>中。code

#include <iostream>
#include <algorithm>

int main()
{
    int myints[] = {1,2,3};
    std::sort(myints, myints + 3);

    std::cout << "The 3! possible permutations with 3 elements:\n";
    do {
        std::cout << myints[0] << " " << myints[1] << " " << myints[2] << "\n";

    } while( std::next_permutation(myints, myints+3) );
    
    std::cout << "After loop:" << myints[0] << " " << myints[1] << " " << myints[2] << "\n";
    return 0;
}
/********output:********
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
After loop:1 2 3
*/

結局數組任意組合後可以爲2的n次冪,則返回true,不然返回false.blog

利用C++ STL的 next_permutation和移位運算符號。排序

//判斷關於數組全排列中是否存在成爲2的冪次的數字。
#include <iostream> 
#include <algorithm>
using namespace std;
bool isPowerOf2(int number)
{
    int tmp = number;
    vector<int> result;
    while(tmp)
    {
        result.push_back(tmp % 10);
        tmp /= 10;
    }
    
    sort(result.begin(), result.end());
    do
    {
        int temp = 0;
        if(result[0] == 0) continue;
        for(int j = 0; j < result.size(); j++)
        {
            temp = temp * 10 + result[j];
        }
             
        for(int k = 0; k < 30; k++)  //移位運算符號
        {
            if( (1 << k) == temp) return true;
        }
    } while(next_permutation(result.begin(), result.end()) );
    return false;
}
           
相關文章
相關標籤/搜索