數組的全排列。ios
題目:從新排序獲得2的冪。數組
從正整數 N
開始,咱們按任何順序(包括原始順序)將數字從新排序,注意其前導數字不能爲零。oop
若是咱們能夠經過上述方式獲得 2 的冪,返回 true
;不然,返回 false
。spa
包含在頭文件<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; }