力扣C++|一题多解之数学题专场(2)

目录

50. Pow(x, n)

60. 排列序列

66. 加一

67. 二进制求和

69. x 的平方根


50. Pow(x, n)

实现 pow(x,n),即计算 x 的 n 次幂函数(即x^n)。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2^(-2) = (1/2)^2 = 1/4 = 0.25

提示:

  • -100.0 < x < 100.0
  • -2^31 <= n <= 2^31-1
  • -10^4 <= x^n <= 10^4

代码1:  

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:double myPow(double x, int n){if (n == 0)return 1;if (n % 2 == 1){double temp = myPow(x, n / 2);return temp * temp * x;}else if (n % 2 == -1){double temp = myPow(x, n / 2);return temp * temp / x;}else{double temp = myPow(x, n / 2);return temp * temp;}}
};int main()
{Solution s;cout << s.myPow(2.00000, 10) << endl;cout << s.myPow(2.10000, 3) << endl;cout << s.myPow(2.0000, -2) << endl;return 0;
} 

代码2:  

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:double helper(double x, int n){if (n == 0)return 1.0;double y = helper(x, n / 2);return n % 2 == 0 ? y * y : y * y * x;}double myPow(double x, int n){long long N = static_cast<long long>(n);if (N == 0)return 1;return N > 0 ? helper(x, N) : 1. / helper(x, -N);}
};int main()
{Solution s;cout << s.myPow(2.00000, 10) << endl;cout << s.myPow(2.10000, 3) << endl;cout << s.myPow(2.0000, -2) << endl;return 0;
} 

代码3:  

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:double myPow(double x, int n){if (n == INT_MIN){double t = dfs(x, -(n / 2));return 1 / t * 1 / t;}else{return n < 0 ? 1 / dfs(x, -n) : dfs(x, n);}}private:double dfs(double x, int n){if (n == 0){return 1;}else if (n == 1){return x;}else{double t = dfs(x, n / 2);return (n % 2) ? (x * t * t) : (t * t);}}
};int main()
{Solution s;cout << s.myPow(2.00000, 10) << endl;cout << s.myPow(2.10000, 3) << endl;cout << s.myPow(2.0000, -2) << endl;return 0;
} 

输出:

1024
9.261
0.25 


60. 排列序列

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 n 和 k,返回第 k 个排列。

示例 1:

输入:n = 3, k = 3
输出:"213"

示例 2:

输入:n = 4, k = 9
输出:"2314"

示例 3:

输入:n = 3, k = 1
输出:"123"

提示:

  • 1 <= n <= 9
  • 1 <= k <= n!

代码1:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:string getPermutation(int n, int k){string ans;vector<bool> st(n + 1);for (int i = 1; i <= n; i++){int f = 1;for (int j = n - i; j >= 1; j--)f *= j;for (int j = 1; j <= n; j++){if (!st[j]){if (k <= f){ans += to_string(j);st[j] = 1;break;}k -= f;}}}return ans;}
};int main()
{Solution s;cout << s.getPermutation(3, 3) << endl;cout << s.getPermutation(4, 9) << endl;cout << s.getPermutation(3, 1) << endl;return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<string> res;string getPermutation(int n, int k){string track;traverse(track, n);return res[k - 1];}void traverse(string &track, int n){if (track.size() == n){res.push_back(track);return;}for (int i = 1; i <= n; i++){char c = i + '0';if (find(track.begin(), track.end(), c) != track.end())continue;track.push_back(c);traverse(track, n);track.pop_back();}}
};int main()
{Solution s;cout << s.getPermutation(3, 3) << endl;cout << s.getPermutation(4, 9) << endl;cout << s.getPermutation(3, 1) << endl;return 0;
} 

代码3:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:int th;string ans;string getPermutation(int n, int k){string s;vector<bool> vec(9, false);this->th = 0;backtrack(n, k, s, vec);return ans;}bool backtrack(int n, int k, string &s, vector<bool> &vec){if (s.length() == n){if (++th == k){ans = s;return true;}}for (char c = '1'; c <= '1' + n - 1; c++){if (vec[c - '1'])continue;s.push_back(c);vec[c - '1'] = true;if (backtrack(n, k, s, vec))return true;s.pop_back();vec[c - '1'] = false;}return false;}
};int main()
{Solution s;cout << s.getPermutation(3, 3) << endl;cout << s.getPermutation(4, 9) << endl;cout << s.getPermutation(3, 1) << endl;return 0;
} 

输出:

213
2314
123 


66. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

代码1:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> plusOne(vector<int> &digits){int len = digits.size() - 1;for (int i = len; i >= 0; i--){if ((digits[i] + 1 == 10 && i == len) || digits[i] >= 10){digits[i] = 0;if (i == 0){digits.insert(digits.begin(), 1);}else{digits[i - 1] += 1;}}else{if (i == len){digits[i] += 1;}break;}}return digits;}
};int main()
{Solution s;vector<int> sum;vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};for (auto digit:digits){sum = s.plusOne(digit);copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));cout << endl;}return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> plusOne(vector<int> &digits){int i = 0;int size = digits.size();for (i = size - 1; i >= 0; i--){digits[i]++;digits[i] = digits[i] % 10;if (digits[i] != 0)return digits;}if (i == -1){digits.insert(digits.begin(), 1);digits[size] = 0;}return digits;}
};int main()
{Solution s;vector<int> sum;vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};for (auto digit:digits){sum = s.plusOne(digit);copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));cout << endl;}return 0;
} 

代码3:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> plusOne(vector<int> &digits){int len = digits.size() - 1;for (; len > 0 && digits[len] == 9; --len){digits[len] = 0;}if (len == 0 && digits[0] == 9){digits[0] = 0;digits.insert(digits.begin(), 1);}else{++digits[len];}return digits;}
};int main()
{Solution s;vector<int> sum;vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};for (auto digit:digits){sum = s.plusOne(digit);copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));cout << endl;}return 0;
} 

输出:

1 2 4
4 3 2 2
1
1 0 0 0 


67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

代码1:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;class Solution
{
public:string addBinary(string a, string b) {string result;int carry = 0;int i = a.length() - 1, j = b.length() - 1;while (i >= 0 || j >= 0 || carry != 0) {int sum = carry;if (i >= 0) {sum += a[i--] - '0';}if (j >= 0) {sum += b[j--] - '0';}result.push_back(sum % 2 + '0');carry = sum / 2;}reverse(result.begin(), result.end());return result;}
};int main()
{Solution s;cout << s.addBinary("11", "1") << endl;cout << s.addBinary("1010", "1011") << endl;cout << s.addBinary("1111", "11111") << endl;cout << s.addBinary("1100", "110111") << endl;return 0;
} 

代码2:  

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;class Solution
{
public:string addBinary(string a, string b){int sum = 0;string res;int p = 0;int i = a.length() - 1, j = b.length() - 1;while (i >= 0 || j >= 0 || sum != 0){if (i >= 0) {sum += a[i--] - '0';}if (j >= 0) {sum += b[j--] - '0';}p = sum % 2;sum /= 2;res += to_string(p);}reverse(res.begin(), res.end());return res;}
};int main()
{Solution s;cout << s.addBinary("11", "1") << endl;cout << s.addBinary("1010", "1011") << endl;cout << s.addBinary("1111", "11111") << endl;cout << s.addBinary("1100", "110111") << endl;return 0;
}

代码3:

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:string addBinary(string a, string b){if (b.size() > a.size()){string temp = b;b = a;a = temp;}int i = a.size() - 1;int j = b.size() - 1;if (i != j){for (int k = 0; k < i - j; k++)b = "0" + b;}int count = 0;for (int k = i; k >= 0; k--){if (a[k] - '0' + b[k] - '0' + count == 0){a[k] = '0';count = 0;}else if (a[k] - '0' + b[k] - '0' + count == 1){a[k] = '1';count = 0;}else if (a[k] - '0' + b[k] - '0' + count == 3){a[k] = '1';count = 1;}else{a[k] = '0';count = 1;}}if (count == 1)a = '1' + a;return a;}
};int main()
{Solution s;cout << s.addBinary("11", "1") << endl;cout << s.addBinary("1010", "1011") << endl;cout << s.addBinary("1111", "11111") << endl;cout << s.addBinary("1100", "110111") << endl;return 0;
} 

代码4:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:string addBinary(string a, string b){string result = "", rr = "";char aa, bb;int l1 = a.length(), l2 = b.length(), i = l1 - 1, j = l2 - 1, carry = 0, sum = 0;while (true){if (i < 0)aa = '0';elseaa = a[i];if (j < 0)bb = '0';elsebb = b[j];sum = (aa - '0') + (bb - '0') + carry;result += ((sum % 2) + '0');carry = sum / 2;j--;i--;if (i < 0 && j < 0){if (carry == 1)result += "1";break;}}int l3 = result.length();for (int i = l3 - 1; i >= 0; i--)rr += result[i];return rr;}
};int main()
{Solution s;cout << s.addBinary("11", "1") << endl;cout << s.addBinary("1010", "1011") << endl;cout << s.addBinary("1111", "11111") << endl;cout << s.addBinary("1100", "110111") << endl;return 0;
} 

输出: 

100
10101
101110
1000011 


69. x 的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

代码1:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:int mySqrt(int x){long long i = 0;long long j = x / 2 + 1;while (i <= j){long long mid = (i + j) / 2;long long res = mid * mid;if (res == x)return mid;else if (res < x)i = mid + 1;elsej = mid - 1;}return j;}
};int main()
{Solution s;cout << s.mySqrt(4) << endl;cout << s.mySqrt(8) << endl;cout << s.mySqrt(121) << endl;cout << s.mySqrt(120) << endl;cout << s.mySqrt(122) << endl;return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:int mySqrt(int x){if (x == 0)return 0;double last = 0;double res = 1;while (res != last){last = res;res = (res + x / res) / 2;}return int(res);}
};int main()
{Solution s;cout << s.mySqrt(4) << endl;cout << s.mySqrt(8) << endl;cout << s.mySqrt(121) << endl;cout << s.mySqrt(120) << endl;cout << s.mySqrt(122) << endl;return 0;
} 

代码3:   

#include <iostream>
#include <math.h>
using namespace std;class Solution
{
public:int mySqrt(int x) {if (x <= 1) {return x;}int left = 1;int right = x;while (left <= right) {int mid = left + (right - left) / 2;if (mid == x / mid) {return mid;} else if (mid < x / mid) {left = mid + 1;} else {right = mid - 1;}}return right;}
};int main()
{Solution s;cout << s.mySqrt(4) << endl;cout << s.mySqrt(8) << endl;cout << s.mySqrt(121) << endl;cout << s.mySqrt(120) << endl;cout << s.mySqrt(122) << endl;return 0;
} 

输出:

2
2
11
10
11

另: cmath或者math.h库中有现成的函数 sqrt() 


相关阅读: 力扣C++|一题多解之数学题专场(1)

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

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

相关文章

听GPT 讲K8s源代码--pkg(八)

k8s项目中 pkg/kubelet/envvars&#xff0c;pkg/kubelet/events&#xff0c;pkg/kubelet/eviction&#xff0c;pkg/kubelet/images&#xff0c;pkg/kubelet/kubeletconfig这些目录都是 kubelet 组件的不同功能模块所在的代码目录。 pkg/kubelet/envvars 目录中包含了与容器运行…

JVM之内存与垃圾回收篇3

文章目录 8 垃圾回收8.1 基本理论8.1.1 对象的finalization机制8.1.2 理解System.gc8.1.3 内存溢出和内存泄漏8.1.4 Stop The World8.1.5 安全点和安全区域8.1.6 Java中的引用 8.2 垃圾回收算法8.2.1 引用计数法8.2.2 可达性分析8.2.2.1 使用MAT查看GC Roots8.2.2.2 使用JProfi…

整车总线系列——FlexRay 四

整车总线系列——FlexRay 四 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能…

Spring使用注解存储Bean对象

文章目录 一. 配置扫描路径二. 使用注解储存Bean对象1. 使用五大类注解储存Bean2. 为什么要有五大类注解&#xff1f;3.4有关获取Bean参数的命名规则 三. 使用方法注解储存Bean对象1. 方法注解储存对象的用法2. Bean的重命名 在前一篇博客中&#xff08; Spring项目创建与Bean…

nginx 配置 wss加密访问 mqtt

1. 在服务器上部署mqtt服务 2.在宝塔上配置域名证书 3.nginx配置websocket server {listen 80;listen 443 ssl http2;server_name ws-xx.example.com;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/ws-xx.example.com;loca…

服务器量化训练操作说明

Freespace服务器预训练主要步骤&#xff1a; 首先登录堡垒机&#xff0c;命令如下&#xff1a; ssh xxxrelay.baidu-int.com &#xff08;xxx为个人邮箱前缀&#xff09; 密码为个人邮箱密码 登录工作机&#xff0c;命令如下&#xff1a; ssh l3yq01-gpu-255-122-22-00.e…

如何在小程序首页隐藏商品分类

​因为在分类页面有显示分类&#xff0c;所以有的商家希望在首页就不显示分类啦。下面就介绍一下如何在首页隐藏商品分类。 在小程序管理员后台->页面设置->首页&#xff0c;显示商品分类设置为否。设置后&#xff0c;在小程序首页商品分类就不会显示啦。注意&#xff1a…

django rest_framework 框架动态设置序列化返回的字段

动态修改字段可以使Django rest框架API像graphQL端点一样&#xff0c;只从模型中检索所需的字段。 一旦序列化器被初始化&#xff0c;就可以使用.fields属性访问序列化器上设置的字段字典。访问和修改此属性允许您动态修改序列化器。 显式地修改fields参数可以帮助您做一些奇…

关于Integer类的一个有趣的面试问题

相信很多人觉得答案是false&#xff0c;false&#xff0c;因为Integer是一个类&#xff0c;把int类型的数据传给Integer类型的数据会创建一个对象&#xff0c;而a,b,c,d作为引用指向的是不同的地址&#xff0c;所以判断相同得到的结果应该是false 但这个想法就正中下怀了&#…

【Spring篇】初识 Spring IoC 与 DI

目录 一. Spring 是什么 ? 二. 何为 IoC ? 三. 如何理解 Spring IoC ? 四. IoC 与 DI 五 . 总结 一. Spring 是什么 ? 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽ 庞⼤…

探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法

目录 存储Bean对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储)Configuration(配置存储)Bean重命名Bean 获取Bean对象属性注入构造方法注入Setter注入Resource(注入关键字) 存储Bean对象 将对象存储在 Spring 中&#xff0c;有两种注解类…

【Linux】信号保存信号处理

前言&#xff1a;对信号产生的思考 上一篇博客所说的信号产生&#xff0c;最终都要有OS来进行执行&#xff0c;为什么&#xff1f;OS是进程的管理者&#xff01;信号的处理是否是立即处理的&#xff1f;在合适的时候 -》那什么是合适的时候&#xff1f;信号如图不是被立即处理…

Windows安装RabbitMQ

Windows安装RabbitMQ 前言配置erlang环境下载配置环境变量验证 安装RabbitMQ验证 参考 前言 本文并不涉及到RabbitMQ的底层原理&#xff0c;或者别的一些特性说明&#xff0c;仅仅只是安装。 配置erlang环境 因为RabbitMQ是使用该语言开发的。 下载 下载地址&#xff1a; …

《qt quick核心编程》笔记一

1.基础HelloWorld代码 import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {width: 400height: 300visible: truetitle: qsTr("Hello 1World")Rectangle {width: parent.widthheight: parent.heightcolor: "gray"Text {…

【数据挖掘】bytewax 与 ydata工具可实时了解您的数据

一、说明 在这篇博文中&#xff0c;我们将介绍如何将开源流式处理解决方案 bytewax 与 ydata 分析相结合并加以利用&#xff0c;以提高流式处理流的质量。 STream 处理支持在传输中和存储之前对数据进行实时分析&#xff0c;并且可以是有状态的&#xff0c;也可以是无状态的。 …

【网络编程】网络套接字udp通用服务器和客户端

1.预备知识 认识端口号 端口号(port)是传输层协议的内容&#xff1a; 端口号是一个2字节16位的整数(uint16)端口号用来标识主机上的一个进程IP地址port能够标识网络上的某一台主机和某一个进程一个端口号只能被一个进程占用 认识TCP协议 此处我们先对TCP(Transmission Con…

Spring MVC异步上传、跨服务器上传和文件下载

一、异步上传 之前的上传方案&#xff0c;在上传成功后都会跳转页面。而在实际开发中&#xff0c;很多情况下上传后不进行跳转&#xff0c;而是进行页面的局部刷新&#xff0c;比如&#xff1a;上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。 1.1 JSP页面 …

[golang gin框架] 41.Gin商城项目-微服务实战之后台Rbac微服务(用户登录 、Gorm数据库配置单独抽离、 Consul配置单独抽离)

上一节抽离了captcha验证码功能,集成了验证码微服务功能,这一节来看看后台Rbac功能,并抽离其中的用户登录,管理员管理,角色管理,权限管理等功能作为微服务来调用 一.引入 后台操作从登录到后台首页,然后其中的管理员管理,角色管理,权限管理等功能可以抽离出来作为 一个Rbac微服…

Python实战

官方文档 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 LearnPythonPython 实现功能点demo

OpenCV for Python 实战(一):获取图片拍摄GPS地址并自动添加水印

Hello 我们在OpenCV每天的基础博客当中已经更新了很多了&#xff0c;那么今天我们就来结合前几天的内容。做一个获取属性然后添加对应属性的水印。那让我们赶快开始吧~ 文章目录 图片EXIFPython 获取EXIFexifread库使用方法转换成文字地址 添加水印cv2.putText() 每日总结 图片…