力扣刷题记录——190. 颠倒二进制位、191. 位1的个数、202. 快乐数

news2024/11/15 19:54:48

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《190. 颠倒二进制位、191. 位1的个数、202. 快乐数》。

目录

190. 颠倒二进制位

        题目描述

        解题思路

        解题过程

 191. 位1的个数

        题目描述

        解题思路

        解题代码

 202. 快乐数

        题目描述

        解题思路 

        解题代码


        

190. 颠倒二进制位

题目描述

颠倒给定的 32 位无符号整数的二进制位。

示例一:

输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000

示例二:

输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
     因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111

解题思路

题目给的是说n是一个32位的字符串,但是提示代码给的是一个整数,有点矛盾,我这里就按照整数来处理了。这一题可以分为两步走,第一步将整数进行翻转,第二步将二进制整数转化为十进制整数输出就可以了。

解题过程

按照上面的思路,我们用列表和字符串的方法将整个整数进行翻转,然后按照二进制转十进制的方式定义一个result变量进行累加就可以了。代码如下:

def reverseBits( n: int):
    target_list = []
    for i in str(n):
        target_list.append(i)
    target_list = target_list[::-1]
    fin_num = "".join(target_list)
    result = 0
    for i in range(len(fin_num)-1,-1,-1):
        result += int(fin_num[len(fin_num)-i-1])*2**i
    return result

print(reverseBits(11111111111111111111111111111101))
#输出结果为:3221225471

奇怪的是,这个代码在我本地的pycharm里面可以很好的运行,测试了好几个测试集都能够给出正确答案,但是在力扣上就会报错

经过长时间的摸索发现,力扣给的整数不是真正意义上的整数,需要用bin函数进行接收,可以理解成,给的是一个十进制的数字,需要先转成二进制才能进行操作,所有我们需要先用bin转化:


class Solution:
    def reverseBits(self, n: int) -> int:
        target_list = []
        for i in bin(n):
            target_list.append(i)
        print(len(target_list))
        target_list = target_list[2::]
        target_list = target_list[::-1]
        fin_num = "".join(target_list)
        for i in range(0,32-len(fin_num)):
            fin_num += "0"
        fin_num = "0b" + fin_num
        return int(fin_num,2)

 主要要加上0b和末尾补零,题目给了是32位,所以根据数字进行补零就可以了 ,执行一下,顺利通关:

 191. 位1的个数

题目描述

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。

解题思路

有了上一题的探索,这一题就很好解决了,主要定义一个count计数器,是1就进行+1就可以。

解题代码

def hammingWeight(n: int):
    count = 0
    for i in bin(n):
        print(i)
        if i == "1":
            count += 1
    return count

 202. 快乐数

题目描述

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

解题思路 

看到一个关键词——“重复”,那么不是用递归就是用while循环了,不知道为什么,我在力扣里面用递归 提示这个函数没定义,还是放弃递归这个办法,虽然它很优美。所有重复这部分我准备用while循环来做,每个位置的数字平方和可以换成字符串用切片来做,这样更方便一点。如果无限循环,说明这个数之前肯定出现过了,所以用一个列表来存储每一次出现的数字,之后每出现一个新的数字就判断一下这个数字是否在之前出现过,如果出现过说明无限循环了,返回True。

解题代码

def isHappy(n: int):
    if n == 1:
        return True
    mask_list = []
    while True:
        mask_list.append(n)
        if n < 10:
            return False
        all = 0
        for i in str(n):
            # print(i)
            all += int(i)**2
        if all in mask_list:
            return True
        n = all
        # print(n)
        if all == 1:
            return True

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gradle学习笔记之依赖

文章目录依赖的方式直接依赖项目依赖本地jar包依赖依赖的类型api和implementation的区别依赖冲突及解决方案移除某个依赖不允许依赖传递强制使用某个版本依赖冲突时立刻构建失败依赖的方式 Gradle中的依赖方式有直接依赖、项目依赖和本地jar包依赖三种&#xff1a; dependenc…

【一起从0开始学习人工智能0x02】字典特征抽取、文本特征抽取、中文文本特征抽取

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录什么是特征工程&#xff1f;用什么做&#xff1f;1.特征提取特征值化&#xff1a;特征提取API字典特征提取---向量化---类别--》one-hot编码哑变量one-hot-------直接1234会产生歧义&#xff0c;不公平应用场…

Python 10k+ 面试试题,看看你是否掌握

前言 大家早好、午好、晚好吖 ❤ ~ 面试实战题&#xff1a;采集世界最大旅游平台Tripadvisor 另我给大家准备了一些资料&#xff0c;包括: 2022最新Python视频教程、Python电子书10个G &#xff08;涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff…

Python GUI编程:音乐播放器(多线程、爬虫、进度条、文件)

文章目录1. 程序运行结果2.程序实现原理3. GUI布局4. 功能介绍5. 代码实现1. 程序运行结果 Python实现音乐播放器(爬虫、多线程、进度条、文件)2.程序实现原理 本音乐播放器GUI方面运用Python的tkinter实现&#xff0c;播放的音乐来自网络爬虫和本电脑已经有的。为了使整个程序…

Android studio设置全屏显示的两种方式

两种在Androidstudio中设置全屏的方式&#xff0c;推荐第二种 第一种&#xff08;Java文件中设置&#xff09; 直接在onCreate()函数中设置 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);package com.exa…

MARKETS AND MARKET LOGIC——The Market‘s Principles (6)_3

市场的组成——对行为观察的反思 制定市场理解 理解市场逻辑将有助于每个参与者提高其在市场上成功的可能性&#xff0c;因为他将能够阅读市场活动并接收市场生成的信息&#xff0c;这些信息很少有参与者承认或理解。这一信息特别涉及市场如何接受或拒绝随着时间的推移而升高或…

Linux用户标识符UID与GID和用户账号

1.用户标识符UID和GID UID 表示的是用户的标识&#xff08;User Identification&#xff09; GID 表示的是用户组的标识&#xff08;Group Identification&#xff09; 显示用户ID信息。 命令&#xff1a;id username 2.用户账号 用户和用户组的信息都存放在…

RabbitMQ(一)Windows下载安装

目录一、下载安装包二、安装erlang三、安装RabbitMQ四、配置RabbitMQ管理界面官网地址&#xff1a;https://www.rabbitmq.com/ 下载地址&#xff1a;https://www.rabbitmq.com/download.html 一、下载安装包 RabbitMQ Windows下载地址&#xff1a;https://www.rabbitmq.com/in…

001. Nginx场景,优点,组成部分和编译

目录一&#xff1a; Nginx三个重要的使用场景二&#xff1a; Nginx的优点三&#xff1a;Nginx文件的组成部分四&#xff1a;编译Nginx一&#xff1a; Nginx三个重要的使用场景 静态资源服务 疑问&#xff1a;为什么需要静态资源服务&#xff1f;答&#xff1a; 在整个的web请求…

string_string数据类型概括

目录string数据类型创建字符串的三种方式检查字符串的方法常用的字符串方法字符串遍历切割字符串为数组​截取子串判断某个字符串是否出现在当前字符串中文本匹配-match、(es6)matchAll文本替换-replace、(es6)replaceAll(es6)获取某个位置的字符串有关ASCII码的方法获取某字符…

Good Bye 2022: 2023 is NEAR C Koxia and Number Theory

Problem - C - Codeforces 题意&#xff1a; 给定一个数列a&#xff0c;问你是否存在一个数 x 使得所有数加上x之后两两互质 思路&#xff1a; 一、 我们知道一个结论&#xff0c;一些数两两之间互质&#xff0c;就说明所有数之间的质因子都不重合 如果要我们去判断一堆数…

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

随着流支付生态 Zebec 不断的实现商业进展&#xff0c;我们看到&#xff0c;其生态从Solana陆续的迁移到以BNB Chain为代表的EVM链上&#xff0c;并推出了以ZK-Rollup为主要技术手段的公链Zebec Chain&#xff0c;以在未来服务且满足于Web2、Web3世界的发展需求。 Zebec正在成…

若依框架:前端项目结构与初始页面渲染流程

目录 main.js入口文件 前端页面初始化 package.json配置文件 vue-cli&#xff1a;.env模式和环境变量配置 vue-cli三大核心构件 CLI 服务与npm scripts vue-cli-service命令与.env模式配置文件 .env模式和环境变量配置 vue.config.js&#xff1a;项目启动-自动打开默认…

pycharm如何设置python文件模板

pycharm如何设置python文件模板设置文件模板预定义变量设置自定义模板变量设置文件模板 打开设置界面 进入编辑器->文件和代码模板 此处我只写了文件头注释模板&#xff0c;也可以加一些默认代码&#xff0c;比如&#xff1a; python if __name__ "__main__":…

NC65在单据添加按钮跳转到固定单据,且进行数据初始化

实现功能 下面两个是按钮 下面红框里面的内容是上面单据带过来的 上面就是本地代码实现的功能 具体实现代码 提前约定 为了方便称呼&#xff0c;这里把第一张图称为上游单据&#xff0c;第二张图为下游单据 所有代码AggVo都要替换成你自己的 配置文件 上游单据拓展配置文…

2023年天津美术学院专升本专业课线上考试安排准备及设备操作说明

天津美术学院2023年高职升本招生专业考试考生须知及操作说明一、考试时间安排二、考前准备 (一)纸张及其他材料(二)考试设备及网络 1.考生须提前准备好至少两部智能手机&#xff0c;为确保网络考试顺利进行&#xff0c;建议考生使用最近3年上市的主流品牌手机&#xff08;如iPh…

太强了!这么设计中间件完美解决了百万并发的问题!

V-xin&#xff1a;ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、大部分人对Java并发仍停留在理论阶段二、中间件系统的内核机制&#xff1a;双缓冲机制三、百万并发的技术挑战四、内存数据写入的锁机制以及串行化问题五、片机制 分段加锁机制 六、缓冲区写满时的双缓冲…

c++ - 第19节 - c++11

1.C11简介 c11简介&#xff1a;在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯…

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法...

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法… 昊虹君用Pycharm进行Python的开发&#xff0c;一直用得好好的&#xff0c;也没作过什么异常操作&#xff0c;但是从上星期开始&#xff0c;打开Project(工程)时停留在preparing worksp…

【王道操作系统】2.1.1 进程的定义、特征、组成、组织

进程的定义、特征、组成、组织 文章目录进程的定义、特征、组成、组织1.进程的定义2.进程的特征3.进程的组成4.进程的组织1.进程的定义 程序的概念&#xff1a; 进程的概念&#xff1a; 进程和程序的区别和联系&#xff1a; 区别&#xff1a; 进程是动态的&#xff0c;程序是静…