力扣题库刷题(随时记录)

力扣题库刷题(随时记录)1 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那两个整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 示例 给定 nums 2 7 11 15 target 9 因为 nums 0 nums 1 2 7 9 所以返回 0 1

1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]




class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for(int j=1+i;j 
   
     ) { 
    if((nums[i]+nums[j])== 
    target) {  
    int t[]= 
    new 
    int[2 
    ]; t[0]= 
    i; t[1]= 
    j;  
    return 
     t; } } }  
    return 
    null 
    ; } } 
   

 

2、

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
/ * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode p=l1; ListNode q=l2; ListNode pp=l1; ListNode =l2; int p_number=1; int q_number=1; while(p.next!=null) { p_number++; p=p.next; } while(q.next!=null) { q_number++; q=q.next; } if(p_number>=q_number) { for(int i=0;i<(q_number);i++) { int m=l1.val+l2.val; l1.val=m; l1=l1.next; l2=l2.next; } l1=pp; for(int i=1;i 
          =10) { int m=l1.val/10; l1.val=l1.val%10; l1.next=new ListNode(m); } return pp; } else { for(int i=0;i<(p_number);i++) { int m=l1.val+l2.val; l2.val=m; l1=l1.next; l2=l2.next; } l2=; for(int i=1;i             =10) { int m=l2.val/10; l2.val=l2.val%10; l2.next=new ListNode(m); } return ; } } }           

  

3、

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 

示例 2:

输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 

示例 3:

输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
(1)暴力法

public int lengthOfLongestSubstring(String s) { if(s.equals("")) { return 0; } char[] start=s.toCharArray(); char a; int he=0; int temp=0; boolean k=true; for(int i=0;i 
    

  (2)滑动窗口方法

滑动窗口是数组/字符串问题中常用的抽象概念。 窗口通常是在数组/字符串中由开始和结束索引定义的一系列元素的集合,即 [i, j)(左闭,右开)。而滑动窗口是可以将两个边界向某一方向“滑动”的窗口。例如,我们将 [i, j)[i,j)向右滑动 11 个元素,则它将变为 [i+1, j+1)[i+1,j+1)(左闭,右开)。

class Solution { public int lengthOfLongestSubstring(String s) { Set 
   
     set= 
    new HashSet<> 
    ();  
    int temp=0 
    ;  
    int i=0; 
    // 
    滑动窗口[i,j) 
    int j=0 
    ;  
    int n= 
    s.length();  
    while(i 
    
      n) { 
     if(! 
     set.contains(s.charAt(j))) { set.add(s.charAt(j++ 
     )); temp=Math.max(temp, j- 
     i); }  
     else 
      { set.remove(s.charAt(i++ 
     )); } }  
     return 
      temp; } } 
     
   

 

5.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 

示例 2:

输入: "cbbd" 输出: "bb"

解决方法:动态规划




class Solution { public String longestPalindrome(String s) { if(s.equals("")) { return ""; } String temp=String.valueOf(s.charAt(0)); //第一种 for(int i=0;i 
   
     ) { 
    for( 
    int j_min=i-1,j_max=i+1;j_min>=0&&j_max 
    
      ) { 
     if 
     (String.valueOf(s.charAt(j_min)).equals(String.valueOf(s.charAt(j_max)))) {  
     if(temp.length()<(j_max-j_min+1 
     )) { temp=s.substring(j_min, j_max+1 
     ); } }  
     else 
     break 
     ; } }  
     // 
     第二种 
     for( 
     int i=0,j=1;i 
     
       ) { 
      for( 
      int j_min=i,j_max=j;j_min>=0&&j_max 
      
        ) { 
       if 
       (String.valueOf(s.charAt(j_min)).equals(String.valueOf(s.charAt(j_max)))) {  
       if(temp.length()<(j_max-j_min+1 
       )) { temp=s.substring(j_min, j_max+1 
       ); } }  
       else 
       break 
       ; } }  
       return 
        temp; } } 
       
      
     
   

 

6.Z字形变换

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L C I R E T O E S I I G E D H N 

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 

示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释: L D R E O E I I E C I H N T S G
class Solution { public String convert(String s, int numRows) { if(s.length()<=numRows) { return s; } String a[]=new String[numRows]; int m=0; for(int i=0;i 
   
     ) { 
    if(i<1 
    ) {  
    for( 
    int j=0;j 
    
      ) { a[j]=""+ 
     s.charAt(m); m++ 
     ; } }  
     if(i>=1 
     ) {  
     for( 
     int j=0;j 
     
       ) { a[j]=a[j]+ 
      s.charAt(m); m++ 
      ; } }  
      for( 
      int q=numRows-2;q>0&&m 
      
        ) { a[q]=a[q]+ 
       s.charAt(m); m++ 
       ; } }  
       for( 
       int f=1;f 
       
         ) { a[0]=a[0]+ 
        a[f]; }  
        return a[0 
        ]; } } 
        
       
      
     
   

 7.整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123 输出: 321 

 示例 2:

输入: -123 输出: -321 

示例 3:

输入: 120 输出: 21
class Solution { public int reverse(int x) { boolean num=true; if(x==-) { return 0; } if(x<0) { //转换成正数 x=-x; num=false; } String a=String.valueOf(x); char m[]=a.toCharArray(); String b=""; for(int i=m.length-1;i>=0;i--) { b=b+m[i]; } long tem=Long.parseLong(b); if(num==false&&tem>l) { return 0; } if(num==true&&tem>l) { return 0; } int temp=Integer.parseInt(b); if(num==true) { return temp; } else { return -temp; } } } 

 8.字符串转换成整数

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,qing返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

输入: "42" 输出: 42 

示例 2:

输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号。   我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。 

示例 3:

输入: "4193 with words" 输出: 4193 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。 

示例 4:

输入: "words and 987" 输出: 0 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。 因此无法执行有效的转换。

示例 5:

输入: "-" 输出: - 解释: 数字 "-" 超过 32 位有符号整数范围。   因此返回 INT_MIN (−231) 。
class Solution { public int myAtoi(String str) { String numb; long tem; for(int i=0;i 
   
     ) { 
    if(str.charAt(i)==' ' 
    ) {  
    if(i==str.length()-1 
    ) {  
    return 0 
    ; }  
    continue 
    ; }  
    if(str.charAt(i)!='-'&&str.charAt(i)!='+'&&(( 
    int)str.charAt(i)<=47||( 
    int)str.charAt(i)>=58 
    )) {  
    return 0 
    ; }  
    else 
     {  
    // 
    当第一个是-,当第一个是+,当地一个是直接是数字  
    if(str.charAt(i)=='-' 
    ) { numb="-" 
    ;  
    if(str.length()==1 
    ) {  
    return 0 
    ; } }  
    if(str.charAt(i)=='+' 
    ) { numb="+" 
    ;  
    if(str.length()==1 
    ) {  
    return 0 
    ; } }  
    else 
     { numb= 
    String.valueOf(str.charAt(i)); }  
    for( 
    int j=i+1;j 
    
      ) { 
     if(str.charAt(j)>47&&str.charAt(j)<58 
     ) { numb=numb+ 
     str.charAt(j); }  
     else 
      {  
     if((j==i+1)&&(str.charAt(i)=='-'||str.charAt(i)=='+' 
     )) {  
     return 0 
     ; }  
     else 
      {  
     break 
     ; } } }  
     // 
     得到数字,判断是否大于int最大值 
     try 
      { tem= 
     Long.parseLong(numb); } 
     catch 
     (Exception ex) {  
     if(numb.charAt(0)=='-' 
     ) {  
     return - 
     ; }  
     else 
      {  
     return 
     ; } }  
     if(tem 
      
      Integer.MAX_VALUE) {  
      if(tem< 
      Integer.MIN_VALUE) {  
      return - 
      ; }  
      else 
       {  
      return 
      ; } }  
      else 
       {  
      int temp=( 
      int 
      ) tem;  
      return 
       temp; } } }  
      return 0 
      ; } } 
      
     
   

 9.回文数

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

示例 1:

输入: 121 输出: true 

示例 2:

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

示例 3:

输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
class Solution { public boolean isPalindrome(int x) { String tem=String.valueOf(x) ; String num=""; for(int i=tem.length()-1;i>=0;i--) { num=num+tem.charAt(i); } if(tem.equals(num)) { return true; } else { return false; } } }

 

转载于:https://www.cnblogs.com/xiaobaidashu/p/10557556.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211506.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:16
下一篇 2026年3月18日 下午10:16


相关推荐

  • impala读不到hive导入的数据(或者表找不到)

    impala读不到hive导入的数据(或者表找不到)

    2021年5月13日
    162
  • MariaDB安装教程

    MariaDB安装教程注:从MariaDB10.4.3开始,不再提供预构建的数据目录,并且用户需要运行mysql_install_db.exe来创建数据目录1、解压到自定义路径E:\MariaDB\mariadb-10.5.4-winx642、将其中的bin加入path系统环境路径3、用管理员方式打开cmd,并打开bin目录4、输入mysql_install_db.exe–datadir=E:\MariaDB\mariadb-10.5.4-winx64\data–service=MyMar..

    2022年6月14日
    38
  • React路由重定向Redirect[通俗易懂]

    React路由重定向Redirect[通俗易懂]react路由重定向<Switch>{/*<Routepath=”/”exactcomponent={NewsPage}/>*/}<Routepath=”/my”component={MyPage}/><Routepath=”/news…

    2022年4月30日
    44
  • Spring boot Mybatis 整合(完整版)

    Spring boot Mybatis 整合(完整版)对Mybatis注解方式有兴趣的,可以查看我的另一篇:SpringbootMybatis整合(注解版)注解方式更加简洁简单,极大程度的提高了开发速度。如果大家需要使用更高的版本比如springboot2.0,请参照我最新的博客springboot2.0Mybatis整合(springboot2.0版本)更多干货SpringBoot快速入门SpringB…

    2022年4月27日
    35
  • 搭建python开发平台「建议收藏」

    搭建python开发平台「建议收藏」python开发

    2022年7月3日
    28
  • 已知负数的补码求原码

    已知负数的补码求原码正数的原码 反码 补码都是一样的 负数的原码你应该知道的 就是带符号位的二进制数 反码 符号位不变为 1 其他每位二进制数取反 1 变 0 0 变 1 补码就是在反码的基础上 符号位不变 最低位加 1 得到补码 这里有个简单的求补码的方法 从原码的最低位向最高位看去 遇到第一个 1 前 保持不变 第一个 1 前面的二进制串取反 符号位保持不变 下面是一个例子 x 这是一个负数 它的原码 反码 补码分别是 用上面的那个简单的方法就可以一步写出

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号