7.Reverse Integer 反转整数
class Solution {
public int reverse(int x) {
List<Integer> aList = new ArrayList<Integer>();
boolean sig = false;
if(x<0){sig = true;x=Math.abs(x);
if (x==Integer.MIN_VALUE){
return 0;
}
}
while(x!=0){
aList.add(x%10);
x=x/10;
}
if(aList.size()==0){
return 0;
}
long sum = 0;
int count =aList.size();
for(int i = 0; i<count;i++){
sum = sum + aList.get(i)*(long)(Math.pow(10, count-1-i));
}
if(sig){
boolean resultSig = sum*-1<-(long)Math.pow(2, 31);
if(resultSig){
return 0;
}else{
return (int)sum*-1;
}
}
else{
boolean resultSig = sum>(long)Math.pow(2, 31)-1;
if(resultSig){
return 0;
}else{
return (int)sum;
}
}
}
}
【注记】Max.abs当传入参数为Integer最小值,则不会返回正数,因为越界了,会返回数本身。坑~
9. Palindrome Number(回文字)
class Solution {
public boolean isPalindrome(int x) {
List<Integer> aList = new ArrayList<Integer>();
int l = x;
if(x<0){return false;}
else{
while(x!=0){
aList.add(x%10);
x=x/10;
}
if(aList.size()==0){
return true;
}
long sum = 0;
int count =aList.size();
for(int i = 0; i<count;i++){
sum = sum + aList.get(i)*(long)(Math.pow(10, count-1-i));
}
boolean resultSig = ((int)sum==l);
if(resultSig){
return true;
}
else{
return false;
}
}
}
}
13. Roman to Integer 罗马数字转为阿拉伯数字
class Solution {
public int romanToInt(String s) {
int sum = 0;
int count = s.length();
for(int i = 0 ;i<count;i++){
switch(s.charAt(i)){
case 'M': sum = sum + 1000;break;
case 'D': sum = sum + 500;break;
case 'I':
if(i+2 <= count && s.substring(i,i+2).equals("IV")){
sum = sum + 4;
i++;
break;
}
if(i+2<=count && s.substring(i,i+2).equals("IX")){
sum = sum + 9;
i++;
break;
}else{
sum = sum + 1;
break;
}
case 'L': sum = sum + 50;break;
case 'X':
if(i+2<=count && s.substring(i,i+2).equals("XL")){
sum = sum + 40;
i++;
break;
}
if(i+2<=count && s.substring(i,i+2).equals("XC")){
sum = sum + 90;
i++;
break;
}else{
sum = sum + 10;
break;
}
case 'V': sum = sum + 5;break;
case 'C':
if(i+2<=count && s.substring(i,i+2).equals("CD")){
sum = sum + 400;
i++;
break;
}
if(i+2<=count && s.substring(i,i+2).equals("CM")){
sum = sum + 900;
i++;
break;
}else{
sum = sum + 100;
break;
}
}
}
return sum;
}
}
14. Longest Common Prefix(找字符串数组前缀)
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length>1){
int[] respond = new int[strs.length];
for(int i = 0;i<strs.length;i++){
respond[i]=strs[i].length();
}
int index=0;
int minValue = respond[0];
for(int i=1;i<strs.length;i++){
if(respond[i]<minValue){
index = i;
minValue=respond[i];
}
}
boolean sig = true;
int count = 0;
if(minValue>0){
for(int k=0;k<minValue;k++){
char c=strs[index].charAt(k);
for(int j=0;j<strs.length;j++)
{
if(strs[j].charAt(k)==c){
continue;
}else{
sig=false;
break;
}
}
if(!sig){
break;
}else{
count++;
}
}
if(count==0){
return "";
}
else{
return strs[index].substring(0,count);
}
}
else{
return "";
}
}else if(strs.length==1){
return strs[0];
}else{
return "";
}
}
}
20. Valid Parentheses(括号匹配)
class Solution {
public boolean isValid(String s) {
if(s.length()%2!=0){
return false;
}else{
List<String> left = new ArrayList<String>();
for(int i=0;i<s.length();i++){
switch(s.charAt(i)){
case '{': left.add("{");break;
case '}':
if(left.size()>0&&left.get(left.size()-1)=="{"){
left.remove(left.size()-1);
}else{
return false;
}
break;
case '[': left.add("[");break;
case ']':
if(left.size()>0&&left.get(left.size()-1)=="["){
left.remove(left.size()-1);
}else{
return false;
}
break;
case '(': left.add("(");break;
case ')':
if(left.size()>0&&left.get(left.size()-1)=="("){
left.remove(left.size()-1);
}else{
return false;
}
break;
}
}
if(left.size()==0){
return true;
}else{
return false;}
}
}
}
21. Merge Two Sorted Lists (两个有序链表合并成一个有序列表)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode p = null;
ListNode newListNode=null;
ListNode templ1=l1;
ListNode templ2=l2;
if(templ1!=null&&templ2!=null){
if(templ1.val<=templ2.val){
ListNode tempNode = new ListNode(templ1.val);
p=tempNode;
newListNode=p;
templ1=templ1.next;
}else{
ListNode tempNode = new ListNode(templ2.val);
p=tempNode;
newListNode=p;
templ2=templ2.next;
}
while(templ1!=null&&templ2!=null){
if(templ1.val<=templ2.val){
ListNode tempNode = new ListNode(templ1.val);
templ1=templ1.next;
p.next=tempNode;
p=p.next;
}else{
ListNode tempNode = new ListNode(templ2.val);
templ2=templ2.next;
p.next = tempNode;
p=p.next;
}
}
if(templ1!=null){
p.next=templ1;
}
if(templ2!=null){
p.next=templ2;
}
return newListNode;}else if(templ1==null&& templ2!=null){
return templ2;
}else if(templ1!=null&& templ2==null){
return templ1;
}
else{
return null;
}
}
}