栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

编程打卡第二天之重新排序得到2的幂

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编程打卡第二天之重新排序得到2的幂

题目描述:给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。

解题思路:

(1)通过枚举,把小于10^9的2的幂都枚举并记录。使用二维vector向量vector>类型记录这些2的幂,vector记录每一组长度相等的2的幂;

(2)写一个计数器,统计输入数字N和2的幂p[i]的数字词频并记录在vector向量中,因为vector可以直接进行相等比较;

代码如下:

#include
#include
#include
#include
using namespace std;


class Solution {
public:
    //pp一格是一个vector,p一格是一个string
    vector< vector > pp;
    vector p;


    //判断两个数每位的数字出现频率是否相等
    bool isEqual(string &v, string &u) {
        vectorv1, u1;//计数器
        v1.assign(10, 0); u1.assign(10, 0);

        for (int i = 0; i < v.size(); i++) {//分别记录u和v中数字出现的频率;
            v1[v[i] -'0'] += 1;
            u1[u[i] -'0'] += 1;
        }
        return v1 == u1;
    }


    bool reorderedPowerOf2(int n) {
        int i, j;
        string sn;

       //枚举所有小于10^9的2的幂
        i = 0, j = 1;
        while (pow(2, i) < 1100000000) {
            //把2的幂转成字符串类型
            sn = to_string((int)pow(2, i));
            //长度相同的2的幂归为一个vector 按字符串长度把各个2的幂分组(行)
            if (sn.size() - j == 0)
                p.push_back(sn);
            else { 
                j++;//2的幂的长度;
                pp.push_back(p);//长度加1,把上一组长度相同的幂加入vector数组
                p.clear();
                p.push_back(sn);
            }//else 
            i++;
        }//whike

        //匹配
        sn = to_string(n); 
        i = sn.size()-1; //获取第sn.size()-1行的2的幂
        p = pp[i];
        //遍历pp的第sn.size()行
        for (j = 0; j < p.size(); j++) {
            if (isEqual(p[j], sn)) {
              return true;
            }//if
        }//for
        return false;
    }

};

int main() {
    Solution solution;
    int n;
    cin >> n;
    cout< 

如果使用python,有自带的计数器Counter

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号