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) { Setset= 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
