力扣 869. 重新排序得到 2 的幂 next_permutation() 全排列函数

题目

在这里插入图片描述

题解思路

直接预处理出所有范围中2的幂次的结果。然后再将这个数全排列枚举出答案。
在这里插入图片描述
全排列可以用next_permutation()函数。
但是他只排列出字典序比这个数大的数,所以先将数字从小到大排序出最小字典序,再用这个函数就可以全排列出所有情况了。

而且这个函数还可以加入cmp来改变比较类型。

参考文章
参考文章

AC代码
class Solution {
public:
    bool reorderedPowerOf2(int n) {
        bool flag = 0 ;
        vector <int> a ;
        int p = 0 ;
        while ( n )
        {
            a.push_back(n%10) ;
            n/=10 ;
            p++;
        }
        unordered_map <int , int > mp ;
        int jc = 1 ;
        mp[jc] = 1 ;
        for ( int i = 1 ; i < 31 ; i++ )
        {
            jc *= 2 ;
            mp[jc] = 1 ;
        }
        sort(a.begin(),a.end()) ;
        do
        {
            if ( a[0] == 0 )
                continue ;
            int sum = 0 ;
            for ( int i = 0 ; i < a.size() ; i++ )
            {
                sum = sum*10 + a[i] ;
            }
          //  cout << sum << "\n" ;
            if ( mp.count(sum) )
            {
                flag = 1 ;
                break ;
            }
        }while (next_permutation(a.begin() , a.end())) ;
        return flag ;
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值