【Leetcode -231. 2的幂 -242.有效的字母异位词 -258.各位相加】

news/2025/1/11 21:48:15/

Leetcode

  • Leetcode -231. 2的幂
  • Leetcode -242.有效的字母异位词
  • Leetcode - 258.各位相加

Leetcode -231. 2的幂

题目:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。

示例:
输入:n = 1
输出:true
解释:20 = 1

  1. 暴力循环求解

我们的思路是,因为n的范围是:2^-31<=n<=2 ^ 31,所以遍历一次i从0到31,只要n等于2的i次方,就返回true;否则返回false;

		bool isPowerOfTwo(int n){for (int i = 0; i <= 31; i++){if (n == pow(2, i)){return true;}}return false;}
  1. 二进制表示

我们的思路是:
如果n是2的幂,那么它的二进制表示肯定是只有一个1,1后面全是0,那么我们将n-1,那么它原来的1变成0,这个0后面全变成1;所以将这两个数按位与,肯定是0;不是0的话肯定不是2的幂;并且n需要大于0,这两个条件其中一个不满足都返回false

		bool isPowerOfTwo(int n){return n > 0 && (n & (n - 1)) == 0;}

Leetcode -242.有效的字母异位词

题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例:
输入: s = “anagram”, t = “nagaram”
输出 : true

提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母

我们的思路是,初始化两个数组为0,将字符串中的字母作为数组的下标,每次这个字母作为下标进入数组的时候,这个字母对应下标的元素就++一次;另一个字符串则存入另一个数组;最后遍历一次26个字母当中,以它们作为下标的元素是否相等;

		bool isAnagram(char* s, char* t){//创建两个哈希表//因为s 和 t 仅包含小写字母,字符串中的小写字母的最大为z,对应的十进制数为122//数组开辟的大小是0-122,即为123int hash1[123] = { 0 };int hash2[123] = { 0 };//将s字符串中的字符作为下标存到哈希表中,每次存进来都++for (int i = 0; i < strlen(s); i++){hash1[s[i]]++;}//将t字符串中的字符作为下标存到哈希表中,每次存进来都++for (int i = 0; i < strlen(t); i++){hash2[t[i]]++;}//遍历一次小写字母当中,以它们对应的字母为下标的元素中,是否相等//不相等说明它们的相同的字母数不相等,返回falsefor (char j = 'a'; j < 'z'; j++){if (hash1[j] != hash2[j]){return false;}}//遍历完没有返回说明都相等,返回truereturn true;}

以上的思路的代码可以更美观:

		bool isAnagram(char* s, char* t){//字符串长度不相等返回falseif (strlen(s) != strlen(t)){return false;}int hash[26] = { 0 };//以s[i]为下标的字母存进去一次就++一次for (int i = 0; i < strlen(s); i++){hash[s[i] - 'a']++;}//以t[i]为下标的字母存进去一次就--一次//如果是相同字母的话,即s[i] == t[i],hash[s[i]]和hash[t[i]]找到的是同一个数组中的元素for (int i = 0; i < strlen(t); i++){hash[t[i] - 'a']--;//当出现负数,即两个字符串相同的字母不相等,返回falseif (hash[t[i] - 'a'] < 0){return false;}}return true;}

Leetcode - 258.各位相加

题目:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

示例:
输入: num = 38
输出 : 2

解释 : 各位相加的过程为:
38 – > 3 + 8 – > 11
11 – > 1 + 1 – > 2
由于 2 是一位数,所以返回 2。

我们的思路是两层循环,外层循环判读n是否还是两位数,里层循环将两位数以上的数的各位相加起来;

		int addDigits(int num){while (num > 9){int sum = 0;while (num){sum += num % 10;num /= 10;}num = sum;}return num;}

http://www.ppmy.cn/news/47151.html

相关文章

(附3D大屏模板)详解FineVis如何打造智慧医院BIM方案!

近日&#xff0c;又一所三甲医院搭建起了智慧医院&#xff0c;它是深圳大鹏新区人民医院&#xff0c;采用IBM技术&#xff0c;是一家集医疗、科研、预防保健和康复疗养功能的综合体。 这栋建筑包含床位数2000个&#xff0c;总建筑面积417444平方米&#xff0c;建筑高度79.75米…

FL Studio21安装体验试用下载fl水果支持最新中文语言功能

FL Studio是什么&#xff1f;如果你打算将来朝着艺术和音乐方向发展&#xff0c;那么学习音乐理论和音乐制作就是一门基础了。FL Studio 21还提供了几十个内置的音乐和声音样本库&#xff0c;以及多种音频效果处理器和虚拟乐器&#xff0c;包括合成器、鼓机、效果器等。这些插件…

开心档之C++ 存储类

C 存储类 目录 C 存储类 auto 存储类 register 存储类 static 存储类 实例 extern 存储类 实例 实例 mutable 存储类 thread_local 存储类 存储类定义 C 程序中变量/函数的范围&#xff08;可见性&#xff09;和生命周期。这些说明符放置在它们所修饰的类型之前。下…

Nacos2.2.2开启鉴权配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、更改application.properties中的配置二、修改配置 前言 最近公司开启了一个新的电商项目&#xff0c;项目中用到了Naocs作为注册中心和配置中心&#xff0…

武器目标分配问题研究进展: 模型、算法与应用

源自&#xff1a;系统公正与电子技术 作者&#xff1a;李梦杰 常雪凝 石建迈 陈超 黄金才 刘忠 摘 要 武器目标分配问题是指挥控制与任务规划领域的关键难点之一, 也是军事运筹领域的基础研究课题。经过多年研究, 武器目标分配问题在陆海空天电等领域都得到了广泛研究,…

深度学习算法及卷积神经网络

目录标题 传统神经网络矩阵计算&#xff1a;正则化&#xff1a;激活函数sigmoid损失函数前向传播激活函数Relu数据预处理DROP-OUT 卷积神经网络(CNN)1.CNN网络的构成2. 卷积层2.1 卷积的计算⽅法2.2 padding2.3 stride2.4 多通道卷积2.5 多卷积核卷积2..6 特征图大小 3. 池化层…

一篇文章让你搞懂TypeScript中的typeof()、keyof()是什么意思

TypeScript中的typeof&#xff08;&#xff09;、keyof&#xff08;&#xff09;是什么意思&#xff1f; 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货&#x1f447;&#x1f447;&#x1f447;举例引入字面量类型&#xff08;literal types&…

7.java程序员必知必会类库之数据库连接池

前言 在java中&#xff0c;“池”化的设计思想随处可见&#xff0c;池化的最终目的是为了对象复用&#xff0c;降低系统创建、销毁对象的成本&#xff0c;提升资源的可管理性。 尤其是一些大对象&#xff0c;创建销毁比较消耗资源的对象&#xff0c;池化可以极大提高效率&…