当前位置:网站首页>剑指 Offer(第 2 版)7/7 14-17
剑指 Offer(第 2 版)7/7 14-17
2022-08-10 05:36:00 【吉良吉影__.】
1.剑指 Offer 15. 二进制中1的个数 简单
二进制知识
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int ans = 0;
while (n != 0){
ans++;
//n & (n - 1) -》 消除最后一位1
n = n & (n - 1);
}
return ans;
}
}
2.剑指 Offer 16. 数值的整数次方 中等
方法一:快速幂 迭代
有空间复杂度
注意点:Math.abs(n) n取整数最小值的情况
class Solution {
public double myPow(double x, int n) {
//n转换位long类型,防止Math.abs越界,当n位整数最小值时abs方法会越界
long tempN = n;
long absN = Math.abs(tempN);
//将原本的O(N) 时间复杂度 降为 O(LogN)
List<Integer> list = new ArrayList<>();
while (absN > 0) {
if (absN % 2 == 0) list.add(0);
else list.add(1);
absN = absN / 2;
}
double ret = 1;
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i) == 0) ret *= ret;
else ret = ret * ret * x;
}
return n > 0 ? ret : 1 / ret;
}
}
方法二:快速幂 递归
class Solution {
public double myPow(double x, int n) {
long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
public double quickMul(double x, long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
}
方法三:快速幂 迭代
无空间复杂度
根据此题二进制的特点
class Solution {
public double myPow(double x, int n) {
//注意第二个参数 不能些 -n
//必须要先转换为long 类型再添负号
return n > 0 ? quickPow(x,n) : 1 / quickPow(x,-((long) n));
}
public double quickPow(double x,long n){
double ans = 1;
double contribute = x;
while (n > 0){
if ((n & 1) == 1){
//此位为1才纳入贡献
ans *= contribute;
}
contribute *= contribute;
n = n >> 1;
}
return ans;
}
}
3.剑指 Offer 17. 打印从1到最大的n位数 简单
class Solution {
public int[] printNumbers(int n) {
int end = (int)Math.pow(10, n) - 1;
int[] res = new int[end];
for(int i = 1; i <= end; i++)
res[i-1] = i;
return res;
}
}
4.剑指 Offer 24. 反转链表 简单
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
class Solution {
public ListNode reverseList(ListNode head) {
ListNode node = new ListNode(0);
while (head != null){
ListNode temp = head.next;
head.next = node.next;
node.next = head;
head = temp;
}
return node.next;
}
}
边栏推荐
- LeetCode 162. Finding Peaks (Moderate)
- 接口自动化2.0
- 51单片机手动自动智能窗户窗帘控制系统手动自动定时
- LeetCode 100. The same tree (simple)
- 程序员副业赚钱之道,实现月收入增加20K
- LeetCode refers to offer 10-I. Fibonacci sequence (simple)
- 常用模块封装-pymysql、pymongo(可优化)
- 开源游戏服务器框架NoahGameFrame(NF)客户端环境搭建(三)
- 【fiddler4】使用fiddler设置简单并发
- 51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
猜你喜欢
开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
LeetCode 面试题17.14 最小k个数(中等)
系统架构和问题定位
pytorch-11. Convolutional Neural Network (Advanced)
LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
卷积神经网络(CNN)实现mnist手写数字识别
STM32F407ZG 串口通信+固定帧头帧尾传输数据帧
ASP.NET连接SQL Server的步骤
Common class String overview
Radon 变换原理和应用
随机推荐
【接口自动化】
LeetCode 1720. Decoding XORed Arrays (Simple)
深度学习TensorFlow入门环境配置
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
pytorch-10.卷积神经网络
51单片机手动自动智能窗户窗帘控制系统手动自动定时
pytorch-06. Logistic regression
【简易笔记】PyTorch官方教程简易笔记 EP1
Pico设备中的截图以及视频文件通过adb命令保存到电脑中
二维卷积定理的验证(下,cv2.filter2D())
详解 Hough 变换(上)基本原理与直线检测
样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
pytorch-11. Convolutional Neural Network (Advanced)
LeetCode 1720.解码异或后的数组(简单)
Tkinter 模块学习
2022李宏毅机器学习hw1--COVID-19 Cases Prediction
.Net Core imports tens of millions of data to Mysql
LeetCode 100.相同的树(简单)
GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602
在Unity的Update中通过物体自身位置判断运动方向