自己做網(wǎng)站申請(qǐng)域名百度廣告電話號(hào)碼是多少
版本說(shuō)明
當(dāng)前版本號(hào)[20231115]。
版本 | 修改說(shuō)明 |
---|---|
20231115 | 初版 |
目錄
文章目錄
- 版本說(shuō)明
- 目錄
- 輸入起始和結(jié)束的正整數(shù),求其兩個(gè)正整數(shù)之間的偶數(shù)和。
- 題目
- 解題思路
- 代碼思路
- 參考代碼
- 兩數(shù)相加
- 題目
- 解題思路
- 代碼思路
- 參考代碼
輸入起始和結(jié)束的正整數(shù),求其兩個(gè)正整數(shù)之間的偶數(shù)和。
題目
輸入起始和結(jié)束的正整數(shù),求其兩個(gè)正整數(shù)之間的偶數(shù)和。
解題思路
- 首先,通過(guò)
input()
函數(shù)獲取用戶輸入的起始數(shù)和結(jié)束數(shù)。 - 然后,將這兩個(gè)輸入的字符串轉(zhuǎn)換為整數(shù)類型,分別賦值給變量
a
和b
。 - 初始化兩個(gè)變量
sum1
和sum2
,用于存儲(chǔ)兩種不同計(jì)算方式下的偶數(shù)和。 - 使用第一個(gè)for循環(huán)遍歷從
a
到b+1
的所有整數(shù)(包括b
),判斷每個(gè)整數(shù)是否為偶數(shù)。如果是偶數(shù),則將其加到sum1
中,并將當(dāng)前整數(shù)加2;如果不是偶數(shù),則將當(dāng)前整數(shù)加1。這樣可以確保在計(jì)算偶數(shù)和時(shí),只考慮偶數(shù)。 - 使用第二個(gè)for循環(huán)遍歷從
a+1
到b
的所有整數(shù)(不包括b
),同樣判斷每個(gè)整數(shù)是否為偶數(shù)。如果是偶數(shù),則將其加到sum2
中,并將當(dāng)前整數(shù)加2;如果不是偶數(shù),則將當(dāng)前整數(shù)加1。這樣可以確保在計(jì)算偶數(shù)和時(shí),不考慮邊界上的奇數(shù)。 - 最后,輸出兩種計(jì)算方式下的偶數(shù)和。
代碼思路
-
首先,通過(guò)input函數(shù)獲取用戶輸入的起始數(shù)和結(jié)束數(shù),并將它們轉(zhuǎn)換為整數(shù)類型。然后,初始化兩個(gè)變量sum1和sum2,分別用于存儲(chǔ)兩種不同計(jì)算方式下的偶數(shù)和。
# 獲取用戶輸入的起始數(shù)和結(jié)束數(shù) x1 = input("請(qǐng)輸入起始數(shù):") x2 = input("請(qǐng)輸入結(jié)束數(shù):")# 將輸入的字符串轉(zhuǎn)換為整數(shù) a = int(x1) b = int(x2)# 初始化偶數(shù)和為0 sum1 = 0# 初始化偶數(shù)和為0 sum2 = 0
-
接下來(lái),使用for循環(huán)遍歷從a到b(包括b)的所有整數(shù)。在循環(huán)中,判斷當(dāng)前整數(shù)是否為偶數(shù),如果是偶數(shù),則將其加到sum1中,并將i增加2;如果不是偶數(shù),則將i增加1。這樣可以確保在計(jì)算偶數(shù)和時(shí),只考慮偶數(shù)。
# 遍歷從a到b(包括b)的所有整數(shù),計(jì)算偶數(shù)和 for i in range(a, b+1):if i % 2 == 0:sum1 += ii += 2else:i += 1
-
同樣地,使用另一個(gè)for循環(huán)遍歷從a+1到b-1(不包括b)的所有整數(shù)。在循環(huán)中,同樣判斷當(dāng)前整數(shù)是否為偶數(shù),如果是偶數(shù),則將其加到sum2中,并將i增加2;如果不是偶數(shù),則將i增加1。這樣可以確保在計(jì)算偶數(shù)和時(shí),不考慮邊界上的奇數(shù)。
# 遍歷從a+1到b-1(不包括b)的所有整數(shù),計(jì)算偶數(shù)和 for i in range(a+1, b):if i % 2 == 0:sum2 += ii += 2else:i += 1
-
最后,輸出兩種計(jì)算方式下的偶數(shù)和。
# 輸出結(jié)果
print(str(a)+"到"+str(b)+"之間的偶數(shù)和(邊界是偶數(shù)時(shí)算這兩個(gè)邊界)是:"+str(sum1))
print(str(a)+"到"+str(b)+"之間的偶數(shù)和(邊界是偶數(shù)時(shí)不算兩個(gè)邊界)是:"+str(sum2))
參考代碼
這段代碼的主要是計(jì)算給定范圍內(nèi)(包括邊界)的偶數(shù)和。
x1 = input("請(qǐng)輸入起始數(shù):")
x2 = input("請(qǐng)輸入結(jié)束數(shù):")
a = int(x1)
b = int(x2)
sum1 = 0
for i in range(a, b+1):if i % 2 == 0:sum1 += ii += 2else:i += 1
sum2 = 0
for i in range(a+1, b):if i % 2 == 0:sum2 += ii += 2else:i += 1
print(str(a)+"到"+str(b)+"之間的偶數(shù)和(邊界是偶數(shù)時(shí)算這兩個(gè)邊界)是:"+str(sum1))
print(str(a)+"到"+str(b)+"之間的偶數(shù)和(邊界是偶數(shù)時(shí)不算兩個(gè)邊界)是:"+str(sum2))
兩數(shù)相加
題目
給你兩個(gè) 非空 的鏈表,表示兩個(gè)非負(fù)的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲(chǔ)的,并且每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
請(qǐng)你將兩個(gè)數(shù)相加,并以相同形式返回一個(gè)表示和的鏈表。
你可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開(kāi)頭。
示例 1:
輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
提示:
每個(gè)鏈表中的節(jié)點(diǎn)數(shù)在范圍 [1, 100] 內(nèi)
0 <= Node.val <= 9
題目數(shù)據(jù)保證列表表示的數(shù)字不含前導(dǎo)零
解題思路
- 初始化一個(gè)空鏈表,用于存儲(chǔ)相加后的結(jié)果。
- 初始化兩個(gè)指針,分別指向兩個(gè)鏈表的頭節(jié)點(diǎn)。
- 初始化一個(gè)變量 carry,用于記錄進(jìn)位值。
- 當(dāng)兩個(gè)鏈表都不為空時(shí),執(zhí)行以下操作: a. 計(jì)算當(dāng)前位置的兩個(gè)節(jié)點(diǎn)的值之和,加上進(jìn)位值。 b. 如果和大于等于10,更新進(jìn)位值為1,否則進(jìn)位值為0。 c. 將和對(duì)10取余,作為新節(jié)點(diǎn)的值。 d. 將新節(jié)點(diǎn)添加到結(jié)果鏈表的末尾。 e. 移動(dòng)兩個(gè)指針到下一個(gè)節(jié)點(diǎn)。
- 如果其中一個(gè)鏈表已經(jīng)遍歷完,但另一個(gè)鏈表還有剩余節(jié)點(diǎn),那么將剩余節(jié)點(diǎn)的值依次加到結(jié)果鏈表的末尾,并考慮進(jìn)位值。
- 如果最后還有進(jìn)位值,那么在結(jié)果鏈表的末尾添加一個(gè)新節(jié)點(diǎn),值為進(jìn)位值。
- 返回結(jié)果鏈表的頭節(jié)點(diǎn)。
代碼思路
-
首先定義了一個(gè)鏈表節(jié)點(diǎn)類ListNode,包含節(jié)點(diǎn)值val和指向下一個(gè)節(jié)點(diǎn)的指針next。
# 定義鏈表節(jié)點(diǎn)類 class ListNode:def __init__(self, val=0, next=None):self.val = val # 節(jié)點(diǎn)值self.next = next # 下一個(gè)節(jié)點(diǎn)
-
然后定義了一個(gè)鏈表類LinkList,包含一個(gè)頭節(jié)點(diǎn)head,以及初始化鏈表的方法initList和將鏈表轉(zhuǎn)換為列表的方法convert_list。
# 定義鏈表類 class LinkList:def __init__(self):self.head = None # 鏈表頭節(jié)點(diǎn)# 初始化鏈表def initList(self, data):self.head = ListNode(data[0]) # 創(chuàng)建頭節(jié)點(diǎn)r = self.head # 記錄頭節(jié)點(diǎn)p = self.head # 當(dāng)前節(jié)點(diǎn)for i in data[1:]:node = ListNode(i) # 創(chuàng)建新節(jié)點(diǎn)p.next = node # 將新節(jié)點(diǎn)添加到當(dāng)前節(jié)點(diǎn)的后面p = p.next # 更新當(dāng)前節(jié)點(diǎn)為新節(jié)點(diǎn)return r # 返回頭節(jié)點(diǎn)# 將鏈表轉(zhuǎn)換為列表def convert_list(self, head):ret = [] # 結(jié)果列表if head == None:return ret # 如果鏈表為空,返回空列表node = head # 從頭節(jié)點(diǎn)開(kāi)始遍歷while node != None:ret.append(node.val) # 將節(jié)點(diǎn)值添加到結(jié)果列表中node = node.next # 移動(dòng)到下一個(gè)節(jié)點(diǎn)return ret # 返回結(jié)果列表
-
接著定義了一個(gè)解決方案類Solution,包含一個(gè)方法addTwoNumbers,用于實(shí)現(xiàn)兩個(gè)鏈表的相加操作。
# 定義解決方案類
class Solution:# 兩個(gè)數(shù)字相加def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:lrr = l1 # 記錄原始頭節(jié)點(diǎn)while True:l1.val = l1.val + l2.val # 計(jì)算當(dāng)前節(jié)點(diǎn)的值if l1.next is None and l2.next is None and l1.val < 10:break # 如果兩個(gè)鏈表都遍歷完畢且當(dāng)前節(jié)點(diǎn)的值小于10,跳出循環(huán)if l1.next is None:l1.next = ListNode(0) # 如果當(dāng)前節(jié)點(diǎn)是最后一個(gè)節(jié)點(diǎn),添加一個(gè)值為0的節(jié)點(diǎn)if l2.next is None:l2.next = ListNode(0) # 如果當(dāng)前節(jié)點(diǎn)是最后一個(gè)節(jié)點(diǎn),添加一個(gè)值為0的節(jié)點(diǎn)if l1.val >= 10:l1.val = l1.val - 10 # 如果當(dāng)前節(jié)點(diǎn)的值大于等于10,減去10并進(jìn)位l1.next.val += 1 # 進(jìn)位后的數(shù)值加到下一個(gè)節(jié)點(diǎn)上l1 = l1.next # 移動(dòng)到下一個(gè)節(jié)點(diǎn)l2 = l2.next # 移動(dòng)到下一個(gè)節(jié)點(diǎn)return lrr # 返回原始頭節(jié)點(diǎn)
參考代碼
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next
class LinkList:def __init__(self):self.head=Nonedef initList(self, data):self.head = ListNode(data[0])r=self.headp = self.headfor i in data[1:]:node = ListNode(i)p.next = nodep = p.nextreturn rdef convert_list(self,head):ret = []if head == None:returnnode = headwhile node != None:ret.append(node.val)node = node.nextreturn ret
class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:lrr = l1while True:l1.val = l1.val + l2.valif l1.next is None and l2.next is None and l1.val < 10:breakif l1.next is None:l1.next = ListNode(0)if l2.next is None:l2.next = ListNode(0)if l1.val >= 10:l1.val = l1.val - 10l1.next.val += 1l1 = l1.nextl2 = l2.nextreturn lrr
# %%
l = LinkList()
list1 = [2,4,3]
list2 = [5,6,4]
l1 = l.initList(list1)
l2 = l.initList(list2)
s = Solution()
print(l.convert_list(s.addTwoNumbers(l1, l2)))