2.两数相加
python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
carry = 0
length = 0
List_head = ListNode(0)
List_head.next = l2
List_card = List_head
while(l1!=None and l2!=None):
List_card = List_card.next
sum_num = l1.val + l2.val + carry
List_card.val = sum_num % 10
carry = sum_num // 10
l1 = l1.next
l2 = l2.next
while(l1!=None):
List_card.next = ListNode(0)
List_card = List_card.next
sum_num = l1.val + carry
List_card.val = sum_num % 10
carry = sum_num // 10
l1 = l1.next
while(l2!=None):
List_card = List_card.next
sum_num = l2.val + carry
List_card.val = sum_num % 10
carry = sum_num // 10
l2 = l2.next
if carry>0:
List_card.next = ListNode(0)
List_card = List_card.next
List_card.val = carry
return List_head.next
写法更简单一些:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
prenode = ListNode(0)
lastnode = prenode
val = 0
while val or l1 or l2:
val, cur = divmod(val + (l1.val if l1 else 0) + (l2.val if l2 else 0), 10)
lastnode.next = ListNode(cur)
lastnode = lastnode.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return prenode.next
其中 python divmod()
把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)
print(divmod(9, 2))
>> 4, 1
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* L_head = new ListNode(0);
ListNode* List_card = L_head;
int carry = 0;
int sum;
while((l1!=NULL)||(l2!=NULL)||(carry!=0)){
sum = 0;
if(l1!=NULL) {sum+=l1->val; l1=l1->next;}
else l1=NULL;
if(l2!=NULL) {sum+=l2->val; l2=l2->next;}
else l2=NULL;
sum+=carry;
List_card->next = new ListNode(sum%10);
List_card = List_card->next;
carry = sum/10;
}
return L_head->next;
}
};
9. 回文数
class Solution:
def isPalindrome(self, x: int) -> bool:
num_list=[]
if(x<0):
return False
while x is not 0:
num_list.append(x%10)
x = x//10
n_list2 = num_list.copy()
num_list.reverse()
if n_list2 == num_list:
return True
else: return False
C++
class Solution {
public:
bool isPalindrome(int x) {
int reverseNum = 0;
if(x<0||(x!=0&&x%10==0))
return false;
while(reverseNum<x){
reverseNum = reverseNum*10 + x % 10;
x = x / 10;
}
if(x == reverseNum ||x == reverseNum/10) return true;
else return false;
}
};
20.有效的括号
python
class Solution:
def isValid(self, s: str) -> bool:
left = ['(', '{', '[']
right = [')', '}', ']']
stack = []
for i in s:
if i in left:
stack.append(i)
if i in right:
if len(stack)==0: return False
else:
i_l = stack.pop()
if left.index(i_l)!=right.index(i):
return False
if len(stack)!=0:
return False
else:
return True
C++
#include<stack>
class Solution {
public:
bool isValid(string s) {
stack<char> st;
char r;
for(int i=0; i<s.length(); i++){
if(s[i]=='('||s[i]=='{'||s[i]=='[')
st.push(s[i]);
else
if(st.empty()) return false;
else{
r = st.top();
st.pop();
if(!((s[i]==')'&&r=='(')||(s[i]=='}'&&r=='{')||(s[i]==']'&&r=='['))) return false;
}
}
if(!st.empty()) return false;
else return true;
}
};