[Go版]算法通关村第十三关白银——数字数学问题之数组实现加法、幂运算
目录
- 数组实现加法专题
- 题目:数组实现整数加法
- 思路分析:数组末尾开始,逐个元素+1,=10就进位,!=10就退出
- 复杂度:时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( n ) O(n) O(n)
- Go代码
- 题目:字符串加法
- 思路分析:定义两指针分别指向两byte数组末尾,从后往前相加,十进制相加余数`=%10`,进位`=/10`
- 复杂度:时间复杂度 O ( m a x ( n , m ) ) O(max(n,m)) O(max(n,m))、空间复杂度 O ( 1 ) O(1) O(1)
- Go代码
- 题目:二进制加法
- 思路分析:定义两指针分别指向两byte数组末尾,从后往前相加,二进制相加余数`=%2`,进位`=/2`
- 复杂度:时间复杂度 O ( m a x ( n , m ) ) O(max(n,m)) O(max(n,m))、空间复杂度 O ( 1 ) O(1) O(1)
- Go代码
- 幂运算专题
- 题目:求2的幂
- 解法1:试除法:循环除2,判断最后值是否==1
- 解法2:`n&(n-1)==0` 或者`n&(-n)==n`
- 解法3:判断n能否被最大2的幂整除(判断n是否为最大2的幂的约数)
- 题目:求3的幂
- 解法1:试除法:循环除3,判断最后是否==1
- 解法2:判断n能否被最大3的幂整除(判断n是否为最大3的幂的约数)
- 题目:求4的幂
- 解法1:试除法:循环除4,判断最后是否==1
- 解法2:必然是2的幂,二进制时1必然在奇数位上`n&0xaaaaaaaa==0`
- 解法3:必然是2的幂,对3取余为1 `n%3==1`
数组实现加法专题
题目:数组实现整数加法
题目链接:LeetCode-66. 加一

思路分析:数组末尾开始,逐个元素+1,=10就进位,!=10就退出
复杂度:时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( n ) O(n) O(n)
Go代码
func plusOne(digits []int) []int {length := len(digits)for i:= length-1; i>=0; i-- {digits[i]++digits[i] = digits[i]%10if digits[i] != 0 {return digits}}ret := make([]int, length+1)ret[0] = 1copy(ret[1:], digits)return ret
}
题目:字符串加法
题目链接:LeetCode-415. 字符串相加

思路分析:定义两指针分别指向两byte数组末尾,从后往前相加,十进制相加余数=%10,进位=/10
复杂度:时间复杂度 O ( m a x ( n , m ) ) O(max(n,m)) O(max(n,m))、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func addStrings(num1 string, num2 string) string {length1, length2 := len(num1), len(num2)ret := ""for i, j, sign := length1-1, length2-1, 0; i >=0 || j >= 0 || sign>0; i,j = i-1,j-1 {var n1, n2 intif i >= 0 {n1 = getNum(num1[i])}if j >= 0 {n2 = getNum(num2[j])}v := n1 + n2 + signret = strconv.Itoa(v%10) + retsign = v/10}return ret
}
func getNum(str byte) int {return int(str-'0')
}
题目:二进制加法
题目链接:LeetCode-LCR 002. 二进制求和

思路分析:定义两指针分别指向两byte数组末尾,从后往前相加,二进制相加余数=%2,进位=/2
复杂度:时间复杂度 O ( m a x ( n , m ) ) O(max(n,m)) O(max(n,m))、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func addBinary(a string, b string) string {length1, length2 := len(a), len(b)str := ""for i,j,sign := length1-1, length2-1, 0; i>=0 || j>=0 || sign>0; i,j = i-1,j-1{var n1, n2 intif i >= 0 {n1 = int(a[i]-'0')}if j >= 0 {n2 = int(b[j]-'0')}v := n1 + n2 + signstr = strconv.Itoa(v%2) + strsign = v/2}return str
}
幂运算专题
题目:求2的幂
题目链接:LeetCode-231. 2 的幂

解法1:试除法:循环除2,判断最后值是否==1
复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfTwo(n int) bool {if n <= 0 {return false}for n%2==0 {n = n/2}return n==1
}
解法2:n&(n-1)==0 或者n&(-n)==n
如果存在非负整数k使得 n=2^k,则n的二进制表示为1后面跟k个0。
所以,正整数n是2的幂,当且仅当n的二进制表示中只有最高位是1,其余位都是0,此时满足 n&(n-1)=0
复杂度:时间复杂度 O ( 1 ) O(1) O(1)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfTwo(n int) bool {return n>0 && n&(n-1)==0
}
func isPowerOfTwo(n int) bool {return n>0 && n&(-n)==n
}
解法3:判断n能否被最大2的幂整除(判断n是否为最大2的幂的约数)
复杂度:时间复杂度 O ( 1 ) O(1) O(1)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfTwo(n int) bool {max := 1<<30return n>0 && max%n == 0
}
题目:求3的幂
题目链接:LeetCode-326. 3 的幂

解法1:试除法:循环除3,判断最后是否==1
复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfThree(n int) bool {if n <= 0 {return false}for n%3==0 {n = n/3}return n == 1
}
解法2:判断n能否被最大3的幂整除(判断n是否为最大3的幂的约数)
在32位有符号整数的范围内,最大的3的幂为3^19=1162261467,判断n是否能被该数整除,即n是否是该数的约数即可。
复杂度:时间复杂度 O ( 1 ) O(1) O(1)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfThree(n int) bool {return n>0 && 1162261467%n==0
}
题目:求4的幂
题目链接:LeetCode-342. 4的幂

解法1:试除法:循环除4,判断最后是否==1
复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfFour(n int) bool {if n <= 0 {return false}for n%4 == 0 {n = n/4}return n==1
}
解法2:必然是2的幂,二进制时1必然在奇数位上n&0xaaaaaaaa==0
4 的一些幂次的二进制表示:
4^0 = 1,二进制表示:0001
4^1 = 4,二进制表示:0100
4^2 = 16,二进制表示:10000
4^3 = 64,二进制表示:1000000
…
这些幂次的二进制表示中,只有一个位是 1,而且这个 1 总是出现在奇数的位置上(从右数,从 0 开始计数)
复杂度:时间复杂度 O ( 1 ) O(1) O(1)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfFour(n int) bool {return n > 0 && n & (n-1) == 0 && (n & 0xaaaaaaaa) == 0
}
解法3:必然是2的幂,对3取余为1 n%3==1
一个整数 n 对 3 取余的结果只可能是 0、1 或 2。如果一个数的二进制表示中只有一个位是 1,并且这个 1 出现在奇数的位置上,那么这个数对 3 取余的结果就是 1。
复杂度:时间复杂度 O ( 1 ) O(1) O(1)、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPowerOfFour(n int) bool {return n > 0 && n & (-n)==n && n%3==1
}
相关文章:
[Go版]算法通关村第十三关白银——数字数学问题之数组实现加法、幂运算
目录 数组实现加法专题题目:数组实现整数加法思路分析:数组末尾开始,逐个元素1,10就进位,!10就退出复杂度:时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( n ) O(n) O(n)Go代码 题目:字符串加法…...
【 OpenGauss源码学习 —— 列存储(Insert)】
列存储(Insert) 概述相关函数ExecInsertRelationData 结构体FormData_pg_class 结构体HeapInsertCStore函数InsertArg 结构体CStoreInsert 类CStoreInsert::InitInsertArg函数heap_deform_tuple 函数bulkload_rows 结构体append_one_tuple 函数bulkload_…...
Android 13.0 framework中实现默认长按电源键弹出关机对话框功能
1.前言 在13.0的系统定制化开发中,在12.0的系统之前默认的都是长按电源键弹出关机对话框,而在13以后 就改成音量+电源键弹出对话框,由于使用不方便,所以就改成默认长按弹出关机对话框功能 2.framework中实现默认长按电源键弹出关机对话框功能的核心类 frameworks/base/s…...
微信小程序,封装身高体重选择器组件
wxml代码: // 微信小程序的插值语法不支持直接使用Math <wxs src"./ruler.wxs" module"math"></wxs> <view class"ruler-container"><scroll-view scroll-left"{{scrollLeft}}" enhanced"{{tru…...
深度学习调参技巧
写完代码—> 小数据上降loss无nan—> 大数据没爆卡速度可以—> 实验log完好可视化loss稳步下降—>回头看实验结果 写完代码后,不要只是在小数据上降loss无nan,还要检查一下模型的输出是否符合预期,比如是否有明显的偏差或者异常值…...
图论基础和表示(Java 实例代码)
目录 图论基础和表示 一、概念及其介绍 二、适用说明 三、图的表达形式 Java 实例代码 src/runoob/graph/DenseGraph.java 文件代码: src/runoob/graph/SparseGraph.java 文件代码: 图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数…...
各种数据库查询报错问题
文章目录 前言一、约束条件是自增,不能直接添加数据二、使用步骤1.引入库2.读入数据 总结 前言 记录常见的数据库使用问题,以及对应解决思路 一、约束条件是自增,不能直接添加数据 消息 8101,级别 16,状态 1…...
人效九宫格城市沙龙暨《人效九宫格白皮书》发布会 —上海站,圆满结束
8月11日,在上海龙之梦万丽酒店,由盖雅工场主办的人效九宫格城市沙龙暨《人效九宫格白皮书》发布会 —上海站,圆满结束。 近百位来自多个行业的企业管理者及人力资源从业者汇聚一堂,共同探讨企业如何将盈利模式从数量增长转为质量增…...
【C语言】文件操作 -- 详解
一、什么是文件 磁盘上的文件是文件。 1、为什么要使用文件 举个例子,当我们想实现一个 “通讯录” 程序时,在通讯录中新建联系人、删除联系人等一系列操作,此时的数据存储于内存中,程序退出后所有数据都会随之消失。为了让通讯录…...
飞天使-k8s基础组件分析-持久化存储
文章目录 emptyDirhostpathpv和pvc介绍nfs作为静态pv案例nfs作为动态pv案例使用本地文件夹作为pv改变默认存储类及回收策略参考文档 emptyDir 重启文件还有,但是如果杀了进程,则会丢失文件 创建pod # kubectl apply –f redis.yaml校验pod是否处于运行&…...
python连接PostgreSQL 数据库
执行如下命令安装 pip3 install psycopg2 python代码 Author: tkhywang 2810248865qq.com Date: 2023-08-21 11:42:17 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-21 11:51:56 FilePath: \PythonProject02\PostgreSQL 数据库.py Description: 这是默认设置…...
数字图像处理—— Lab、YCbCr、HSV、RGB之间互转
Lab “Lab” 图像格式通常指的是 CIELAB 色彩空间,也称为 Lab 色彩空间。它是一种用于描述人类视觉感知的颜色的设备无关色彩空间,与常见的 RGB 和 CMYK 色彩空间不同。CIELAB 由国际照明委员会(CIE)于1976年定义,用于…...
自动驾驶SLAM技术第四章习题2
在g2o的基础上改成ceres优化,高博都写好了其他的部分, 后面改ceres就很简单了. 这块我用的是ceres的自动求导,很方便,就是转化为模板仿函数的时候有点麻烦, 代码部分如下 ceres_type.h : ceres优化核心库的头文件 这个文件写的内…...
vue拖拽div盒子实现上下拖动互换
vue拖拽div盒子实现上下拖动互换 <div v-for"(item, index) in formList" :key"index" draggable"true"dragstart"handleDragStart($event, item)"dragenter"handleDragEnter($event, item)"dragover.prevent"han…...
Visual Studio 2022 右键单击项目没有出现View | View Class Diagram(Visual Studio 无法使用类设计器)
文章目录 问题描述原因.NET Core项目.NET Framework项目 问题描述 当我们在Solution Explorer窗口右键单击项目时,快捷菜单中没有出现“查看”,或者出现了“查看”,但是“查看”里没有View Class Diagram。 原因 首先你要确保你安装了类设…...
EFCore常见用法
EFCore官方文档置顶,看这个就行。下面的内容只是总结,算是备忘录。 一、创建和删除 //1、创建数据库和表 db.Database.EnsureCreated();//将创建数据库(如果不存在)并初始化数据库架构。 如果存在任何表 (包括另一 DbContext 类)…...
概率论与数理统计:第六章:数理统计
文章目录 Ch6. 数理统计(一) 总体与样本(二) 统计量 (5个)2.5个常用统计量3.矩的概念 (三) 抽样分布 (3个)0.上α分位点1.χ分布2.t分布3.F分布 (四) 抽样分布定理1.单个正态总体2.两个正态总体 Ch6. 数理统计 (一) 总体与样本 1.概念: (1)总体 (2)样本 简单随机…...
拥塞控制(TCP限制窗口大小的机制)
拥塞控制机制可以使滑动窗口在保证可靠性的前提下,提高传输效率 关于滑动窗口的属性以及部分机制推荐看TCP中窗口和滑动窗口的含义以及流量控制 拥塞控制出现的原因 看了上面推荐的博客我们已经知道了,由于接收方接收数据的能力有限,所以要通…...
校园供水系统智能管理
import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…...
Flask-SocketIO和Flask-Login联合开发socketio权限系统
设置 Flask, Flask-SocketIO, Flask-Login: 首先,确保安装了必要的库: pip install Flask Flask-SocketIO Flask-Login基础设置: from flask import Flask, render_template, redirect, url_for, request from flask_socketio import SocketIO, emit from flask_…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
