Leetcode刷题-(6~10)-Java+Python+JavaScript

算法题是程序员的基本功,也是各个大厂必考察的重点,让我们一起坚持写算法题吧

遇事不决,可问春风,春风不语,即是本心。

我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。

目录

1.Z字形变换

2.整数反转

3.字符串转换整数 (atoi)

4.回文数

5.正则表达式匹配


1.Z字形变换

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/zigzag-conversion/description/

思路:本题是标准的模拟,可以直接定义二维矩阵进行模拟填充,但是存在大量的空间浪费,本题可以定义numRows行的字符串数组,按照规则将元素拼接到相应的行,最后一以此遍历取出每行的数据拼接成字符串即可。

注:本题的难点在于找出拼接到哪一行的条件语句。

Java版:
 

class Solution {public String convert(String s, int numRows) {int n = s.length(), row = numRows ;if(row==1 || row >=n){return s ;}String ans = "" ;StringBuilder [] sb = new StringBuilder[row] ;for(int i=0; i<row; i++){sb[i] = new StringBuilder() ;}for(int i=0,x=0; i<n;i++){sb[x].append(s.charAt(i)) ;// 重点在此处,需要找出什么时候当前字符拼接到第x行if(i%(row*2-2) < row-1){x++  ;}else{x-- ;}}for(StringBuilder s1 : sb){ans += s1.toString() ;}return ans ;}
}

Python版:

class Solution:def convert(self, s: str, numRows: int) -> str:n = len(s)row = numRowsans = ""if row == 1 or row >= n:return smatrix = ["" for _ in range(n)]x =  0t = row * 2 - 2 for i, ch in enumerate(s):matrix[x] += chif i%t < row -1:x = x + 1else:x = x - 1for i in range(row):ans += matrix[i]return ans 

Js版:

/*** @param {string} s* @param {number} numRows* @return {string}*/
var convert = function(s, numRows) {const n = s.length, row = numRowslet ans = ""if(row==1 || row>=n){return s}const arr = new Array(row)for(let i=0; i<row; i++){arr[i] = "" }for(let i=0,x=0; i<n; i++){arr[x] += s.charAt(i) if(i % (row*2-2) < row -1){x ++ }else{x -- }}for(let i=0; i<row; i++){ans += arr[i] ;}return ans ;};

2.整数反转

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-integer/description/

思路:找出反转公式就可以了,ans=ans*10+x%10 , x = x / 10

最后的ans就是反转后整数,不过需要判断是否超出范围,也就是说ans定义为long,超出范围则返回0即可。

Java版:
 

class Solution {public int reverse(int x) {long ans = 0 ;while(x != 0){ans = ans*10 + x%10 ;x = x / 10 ;// 反转后的超过了范围就返回0,否则返回反转后的ans = ans > Integer.MAX_VALUE || ans < Integer.MIN_VALUE ? 0: (int)ans ;}return (int) ans ;}
}

Python版:
 

class Solution:def reverse(self, x: int) -> int:ans = 0flag = Falseif x < 0:x = -xflag = True while x != 0:ans = ans * 10 + x % 10 x = x // 10if ans > math.pow(2,31):return 0else:if flag:return -1 * ans else :return ans 

Js版:

/*** @param {number} x* @return {number}*/
var reverse = function(x) {let ans = 0let flag = falseif (x < 0){x = -xflag = true}while(x != 0){ans = ans * 10 + x % 10x = Math.floor(x / 10)}if(ans > Math.pow(2,31)){return 0 }else{if(flag){return -1 * ans }else{return ans}}
};

3.字符串转换整数 (atoi)

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/string-to-integer-atoi/

思路:模拟题,遍历字符串,模拟出字符串转换成整数的过程即可,需要按照题目要求进行模拟。

Java版:

class Solution {public int myAtoi(String s) {String s1 = s.trim();long ans = 0 ;boolean flag = false ;for(int i=0; i<s1.length(); i++){char c = s1.charAt(i) ;if(c == '-' || c == '+' ){if(i!=0){break ;}flag = (c=='-' ? true : false) ;}else{if(Character.isDigit(c)){ans = ans * 10 + (c - '0') ;if(ans > Math.pow(2,31)-1 && !flag ){return (int) Math.pow(2,31)  ;}if(flag && ans > Math.pow(2,31)){return -1 * (int) Math.pow(2,31) - 1 ;}}else{break ;}}}return flag == true ? -1 * (int) ans : (int) ans ;}
}

Python版:
 

class Solution:def myAtoi(self, s: str) -> int:flag = Falseans = 0s = s.strip()for i, c in enumerate(s):if c == '+' or c == '-':if i != 0:break if c == '-':flag = Trueelse:if(c.isdigit()):ans = ans * 10 + int(c)if flag == False and ans > math.pow(2,31) - 1:return int(math.pow(2,31)) - 1if flag and ans > math.pow(2,31):return -1 * int(math.pow(2,31))else:break if flag:return - 1 * ans else:return ans 

Js版:
 

/*** @param {string} s* @return {number}*/
var myAtoi = function(s) {let ans = 0let flag = false s = s.trim()for(let i=0; i<s.length; i++){const c = s.charAt(i) if(c == '-' || c == '+'){if(i!=0){break }flag = (c == '-') ? true : false }else{if(!isNaN(parseFloat(c))){ans = ans * 10 + (c-'0')if(flag == false && ans > Math.pow(2,31)-1){return Math.pow(2,31) - 1}if(flag && ans > Math.pow(2,31)){return Math.pow(2,31) * -1 }}else{break ;}}}return flag ? -1 * ans : ans ;
};

4.回文数

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/palindrome-number/description/

思路:双指针方式是最常用的方式,当然也可以用字符串反转的方式。

Java版1:
 

class Solution {public boolean isPalindrome(int x) {String s = new String(x+"") ;int low = 0, high = s.length()-1 ;while(low < high){if(s.charAt(low) != s.charAt(high)){return false ;}else{low ++ ;high -- ;}}return true ;}
}

Java版2:

class Solution {public boolean isPalindrome(int x) {return (new StringBuilder(x+"").toString()).equals(new StringBuilder(x+"").reverse().toString()) ;}
}

Python版:

class Solution:def isPalindrome(self, x: int) -> bool:s = str(x)low = 0high = len(s) - 1while low < high:if s[low] != s[high]:return Falseelse:low = low + 1high = high - 1return True

Js版:

/*** @param {number} x* @return {boolean}*/
var isPalindrome = function(x) {const s = x.toString()let low = 0, high = s.length-1while (low < high){if(s.charAt(low) !== s.charAt(high)){return false }else{low ++ high --}}return true
};

5.正则表达式匹配

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/regular-expression-matching/description/

思路:本题是动态规划 ,省略....

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

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

相关文章

python代码的保护之Pyarmor(一)

我们在用python程序开发完程序后&#xff0c;进行程序发布。发布后要保证算法的安全性&#xff0c;常常需要对代码进行保护&#xff0c;通过这段时间的搜集整理&#xff0c;目前常见的保护方式有&#xff1a;代码混淆加密、编译成二进制动态库、 本篇讲述Pyarmor加密 参考链接&…

Java 面向对象02 封装 (黑马)

人画圆&#xff1a;画圆这个方法应该定义在园这个类里面。 人关门&#xff1a;是人给了门一个作用力&#xff0c;然后门自己关上了门&#xff0c;所以关门的方法是在门的类里面 封装对象的好处&#xff1a; 调用Java自带的方法举例实现&#xff1a; 在测试类中&#xff0c;对其…

聊一聊 C# 的线程本地存储TLS到底是什么

一&#xff1a;背景 1. 讲故事 有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的&#xff1f;这么说吧&#xff0c;C#的ThreadStatic是假的&#xff0c;因为C#完全是由CLR&#xff08;C&#xff09;承载的&#xff0c;言外之意C#的线程本地存储&#xff…

长风破浪会有时

工作半年了&#xff0c;实际的工作体验跟当初想象的好像是不太一样。感觉还是在学校读书好啊 方向&#xff1f; 半年没更了&#xff0c;偶尔也有些网友私信问我DSP相关的问题&#xff0c;但是我现在也没有继续做DSP了&#xff0c;很多也都忘了&#xff0c;所以可能帮不上什么…

linux第一个小程序 --- 进度条【简洁】

行缓冲区的概念 结果&#xff1a;先输入hello world然后休眠三秒后结束 当去掉’\n“ 后&#xff0c;结果就变成了先休眠三秒&#xff0c;然后打印hello world后结束。 该现象就证明了缓冲区的存在。 当缓冲区中遇到’‘\n’或者缓冲区被写满后才会被打印出来&#xff0c;在第…

Rust、Go、C ,哪个才是“内存管理大师”?

编程语言各有各的“大能”&#xff0c;但如果谈到内存管理&#xff0c;Rust的话语权不是一般的高。GC&#xff08;垃圾回收&#xff09;&#xff1f;手动分配&#xff1f;对于掌握了Rust奥义的开发者而言&#xff0c;这些词汇简直弱爆了。众所周知&#xff0c;Rust编程语言的主…

nginx基本优化

1、安装nginx隐藏版本号 1.1、查看百度web服务器 [rootcjq11 ~]# curl -I http://www.baidu.com 1.2、隐藏nginx服务器版本号 [rootcjq11 ~]# cd /usr/local/src/nginx-1.22.0/ [rootcjq11 nginx-1.22.0]# vim src/core/nginx.h第13、14行修改版本号和服务器名称 [rootcj…

洛谷P5732 【深基5.习7】杨辉三角(C语言)

入门递推题&#xff0c;就算你不是OIer也该知道的杨辉三角 同时这也是组合数的公式&#xff0c;很重要&#xff0c;因为常规组合数公式是阶乘运算会爆&#xff0c;而这个就不怎么会了 赋 arr[i][j]初值1&#xff0c;接下来就可以递推了 #include<stdio.h> int main() …

LeetCode 热题 100 | 双指针(下)

目录 42. 接雨水 1 方法一&#xff1a;我的方法 2 方法二&#xff1a;动态规划 3 方法三&#xff1a;双指针 菜鸟做题第一周&#xff0c;语言是 C 42. 接雨水 1 方法一&#xff1a;我的方法 Warning&#xff1a;这是我的智障做法&#xff0c;请勿模仿 我只能说它教会…

Oracle 12CR2 RAC部署翻车,bug避坑经历

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

R 语言学习 case3:柱状图(ggchart)

主要涉及到对图的优化&#xff0c;使用ggchart工具包 ggchart 链接&#xff1a;https://thomas-neitmann.github.io/ggcharts/index.html step1: 安装工具包 install.packages("ggcharts") install.packages("tidytext")step2: 导入工具包 library(dplyr…

web渗透安全学习笔记:2、HTML基础知识

目录 前言 HTML的标题 段落链接与插入图片 HTML元素 HTML属性 HTML头部 HTML与CSS HTML与JavaScript 表格与列表 HTML区块 布局 HTML表单 HTML与数据库 音频与视频 HTML事件 前言 HTML的标题 <!DOCTYPE html> <html> <head> <meta chars…