当前位置: 首页 > news >正文

LeetCodeHot100-第三章:数学

面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

目录

🎈1、双指针:9. 回文数

🎈2、逻辑题 :66. 加一

🎈3、逻辑题:172. 阶乘后的零

🎈4、二分模板:69. x 的平方根 

🎈5、位运算:50. Pow(x, n)

🎈6、暴力模拟:149. 直线上最多的点数


🎈1、双指针:9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

进阶:你能不将整数转为字符串来解决这个问题吗?

class Solution {
    public boolean isPalindrome(int x) {
        String s = Integer.toString(x);
		char[] arr=s.toCharArray();
		int left=0;
		int right=arr.length-1;
		while(left<right){
			if(arr[left]!=arr[right]){
				return false;
			}
			left++;
			right--;
		}
		return true;
    }
}

🎈2、逻辑题 :66. 加一

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

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

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

示例 1:

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

示例 2:

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

示例 3:

输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
class Solution {
    public int[] plusOne(int[] digits) {
        for(int i = digits.length - 1; i >= 0; i--){
			digits[i] = digits[i] + 1;
			if(digits[i] == 10){
				//当前值置0,下一位数字继续叠加
				digits[i] = 0;
			}else{
				return digits;
			}
		}
		//没有return只有可能是当前的值为99999.....,的情况,只需要new一个比原来数组大1的就可以.且把第一个元素置1,后面全0
		digits = new int[digits.length + 1];
		digits[0] = 1;
		return digits;
    }
}

🎈3、逻辑题:172. 阶乘后的零

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

示例 1:

输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0

示例 2:

输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0

示例 3:

输入:n = 0
输出:0

进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?

class Solution {
    public int trailingZeroes(int n) {
        int ans=0;
		//0的个数取决于5的数量
		while (n!=0){
			ans+=n/5;
			n/=5;
		}
		return ans;
    }
}

🎈4、二分模板:69. x 的平方根 

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

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

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
class Solution {
    public int mySqrt(int x) {
        int l=0,r=x,ans=-1;
		while(l<=r){
			int mid=(l+r)/2;
			// 之前写的CSDN二分模板:
			// https://blog.csdn.net/m0_55858611/article/details/128910634?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f0b874fdc6ea87b7d3fe64ae017dde2a%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=f0b874fdc6ea87b7d3fe64ae017dde2a&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-128910634-null-null.nonecase&utm_term=%E4%BA%8C%E5%88%86&spm=1018.2226.3001.4450
			/**
			 * //二分查找最优边长
			 *         while (l <= r) {
			 *             //mid为边长
			 *             mid = (l + r) / 2;
			 *             if (check(mid)) {
			 *                 //ans是用来记录count=K时的mid的
			 *                 ans = mid;
			 *                 l = mid + 1;
			 *             } else {
			 *                 r = mid - 1;
			 *             }
			 *         }
			 *         System.out.println(ans);
			 */
			if((long)mid*mid<=x){
				ans=mid;
				l=mid+1;
			}else {
				r=mid-1;
			}
		}
		return ans;
    }
}

🎈5、位运算:50. Pow(x, n)

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

示例 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/22 = 1/4 = 0.25
class Solution {
        public double myPow(double x, int n) {
        //灵神题解
		// https://leetcode.cn/problems/powx-n/solutions/2858114/tu-jie-yi-zhang-tu-miao-dong-kuai-su-mi-ykp3i/?envType=study-plan-v2&envId=top-interview-150
		double ans=1;
		long N=n;
		if(N<0){
			N=-N;
			x=1/x;
		}
		while(N>0){
			if((N&1)==1){
				ans*=x;
			}
			x*=x;
			N>>=1;
		}
		return ans;
    }
}

🎈6、暴力模拟:149. 直线上最多的点数

class Solution {
    //暴力模拟
    //1 <= points.length <= 300题目给的数据量有限的情况下
        public int maxPoints(int[][] points) {
        int length=points.length;
		if(length<=2)return length;
		int ans=0;
		for(int i=0;i<length;i++){
			for(int j=0;j<i;j++){
				int x1=points[i][0];
				int y1=points[i][1];
				int x2=points[j][0];
				int y2=points[j][1];
				int temp=2;
				for(int k=0;k<j;k++){
					int x3=points[k][0];
					int y3=points[k][1];
					if((y3-y2)*(x2-x1)==(y2-y1)*(x3-x2)){
						temp++;
					}
				}
				ans=Math.max(ans,temp);
			}
		}
		return ans;
    }
}

相关文章:

  • DeepSeek-V3与DeepSeek-R1全面解析:从架构原理到实战应用
  • 雪花算法、md5加密
  • 罗技K860键盘
  • 【MCP】VSCode Cline配置MongoDB连接
  • 新的“估值锚点”:慧通测控人形(协作)机器人多任务并行
  • Java 大视界 -- 基于 Java 的大数据分布式缓存技术在电商高并发场景下的性能优化(181)
  • 从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
  • 文档控件DevExpress Office File API v24.2亮点:不再支持非Windows系统
  • 供应链管理-职业规划:数字化供应链管理专家 / 供应链管理商业模式专家 / 供应链管理方案专家
  • nginx正向代理https
  • Java 大厂面试题 -- JVM 深度剖析:解锁大厂 Offe 的核心密钥
  • 0基础 | 硬件 | LM386芯片
  • 前端面试核心知识点整理:从 JavaScript 到 Vue 全解析
  • Mythical Beings:第八季即将回归,探索新的神话传承
  • 2021-10-26 C++完美身材
  • 记录学习的第二十三天
  • debian12安装mysql5.7.42(deb)
  • SeeGround: See and Ground for Zero-Shot Open-Vocabulary 3D Visual Grounding
  • 第二章:SQL 进阶操作与多表查询
  • 基于springboot+vue的课程管理系统
  • 句容市住房和城乡建设局网站/关键词在线听免费
  • 新手学计算机编程入门/兰州seo外包公司
  • 重庆建设网站公司简介/百度关键词推广怎么做
  • 网站设计的简称/网站查询域名入口
  • 东莞网站开发推荐/如何建立一个自己的网站?
  • php 做视频网站/保定百度seo排名