当前位置:网站首页>【LeetCode——编程能力入门第二天】运算符(位1的个数/整数的各位积和之差)
【LeetCode——编程能力入门第二天】运算符(位1的个数/整数的各位积和之差)
2022-07-17 05:04:00 【Super大雄】
题目:位1的个数
目录
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
提示:
请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
提示:
输入必须是长度为 32 的 二进制串 。
进阶:
如果多次调用这个函数,你将如何优化你的算法?
分析:
我是使用Integer.BinaryString把十进制转换为二进制然后把他转换为一个字符串循环遍历截取每一个字符判断是否为1的方式进行累加的,我觉的这个方法比较笨重。于是看了其他大佬的解法使用了Integer.bitCount();bigCount是什么? 我们来看一下原码
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}bigCount():返回二进制补码中1位的个数 。使用这个函数可以直接求出二进制中一的个数!目前我不并明白其中的位运算,欢迎大佬提出宝贵的指导意见。
解法一代码:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
return Integer.bitCount(n);
}
}解法二代码:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
String s=Integer.toBinaryString(n);
int sum=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='1')
sum++;
}
return sum;
}
}题目 :整数的各位积和之差
给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。
示例 1:
输入:n = 234
输出:15
解释:
各位数之积 = 2 * 3 * 4 = 24
各位数之和 = 2 + 3 + 4 = 9
结果 = 24 - 9 = 15
示例 2:输入:n = 4421
输出:21
解释:
各位数之积 = 4 * 4 * 2 * 1 = 32
各位数之和 = 4 + 4 + 2 + 1 = 11
结果 = 32 - 11 = 21提示:
1 <= n <= 10^5
分析:
我们可以使用%10取末尾,/10削末尾的方法拿到各个位置的数然后进行相乘、相加即可。
代码:
class Solution {
public int subtractProductAndSum(int n) {
int i=1;
int j=0;
int k=n;
while(k!=0){
i*=k%10;
j+=k%10;
k/=10;
}
return i-j;
}
}CSDN社区 《创作达人》活动,只要参与其中并创作文章就有机会获得官方奖品:精品日历、新程序员杂志,快来参与吧!链接直达 https://bbs.csdn.net/topics/605272551
边栏推荐
- MySQL fuzzy matching 1, 11111 similar string problems
- ModerlArts第一次培训笔记
- The code of yolov5 model for pest identification in Title A of the 10th Teddy cup data mining challenge (has been run through, original works, continuously updated)
- CVE-2022-23131 Zabbix SAML SSO认证绕过漏洞
- 数据分析与数据挖掘实战案例本地房价预测(716):
- Microservice high concurrency service governance
- 【C】 Beam calculator
- 读论文《Learning to Measure Changes: Fully Convolutional Siamese Metric Networks for Scene Change Detec》
- Attendance check-in and leave system based on SSM framework
- 泰迪杯A题完整版 优化更新(4/23)
猜你喜欢

一个问题的探讨

POC——DVWA‘s SQL Injection

数据库实训7【索引与数据完整性约束的创建】

ModelArts第二次培訓筆記

Attendance check-in and leave system based on SSM framework

HarmonyOS第三次培训笔记

CVE-2017-12635 Couchdb 垂直权限绕过漏洞复现

Teddy Cup title a full version optimization update (4/23)

Simple use of directexchange switches.

Restclient operation document
随机推荐
Pygame:外星人入侵
[batch] batch delete intermediate folder - personal research script
卷积神经网络
图片上传的逻辑
MySQL takes the union of two query conditions and then queries
NVIDIA GeForce Experience登录报错:验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序(解决办法)
【Batch】批量删除中间文件夹-个人研究脚本
上传七牛云的方法
POC——DVWA‘s SQL Injection
Feature extraction of machine learning (digitization and discretization of category features and digitization of text features)
DirectExchange交换机的简单使用。
Sleuth getting started
First training notes of moderlarts
es的一些概念
Order system of middle office
Wechat docking mechanism memo
哨兵二号轨道数据下载
CVE-2022-23131 Zabbix SAML SSO认证绕过漏洞
pygame-飞机大战1.0(步骤+窗口无响应问题)
Some concepts of ES