در این مطلب، ویدئو ماشین حساب پایه III | LEETCODE # 772 | راه حل پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:13:04
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,080 –> 00:00:01,599
و به کانال کرک فانگ یوتیوب خوش آمدید
2
00:00:01,599 –> 00:00:03,040
امروز ما می خواهیم
3
00:00:03,040 –> 00:00:06,080
مشکل کد لید 772 را حل کنیم
4
00:00:06,080 –> 00:00:08,320
. ماشین حساب پایه
5
00:00:08,320 –> 00:00:10,719
3. یک ماشین حساب پایه برای ارزیابی
6
00:00:10,719 –> 00:00:12,719
یک رشته عبارت ساده پیاده سازی کنیم.
7
00:00:12,719 –> 00:00:14,639
رشته عبارت فقط شامل
8
00:00:14,639 –> 00:00:17,440
اعداد صحیح غیر
9
00:00:17,440 –> 00:00:20,000
منفی است. عملگر ضرب
10
00:00:20,000 –> 00:00:22,800
و عملگر تقسیم و پرانتز باز و
11
00:00:22,800 –> 00:00:24,480
بسته شدن
12
00:00:24,480 –> 00:00:26,640
تقسیم عدد صحیح باید
13
00:00:26,640 –> 00:00:28,160
به سمت صفر کوتاه شود،
14
00:00:28,160 –> 00:00:29,679
همچنین ممکن است فرض کنید که
15
00:00:29,679 –> 00:00:31,599
عبارت داده شده همیشه معتبر است و همه
16
00:00:31,599 –> 00:00:33,200
نتایج میانی در
17
00:00:33,200 –> 00:00:36,000
محدوده منهای 2 تا 31
18
00:00:36,000 –> 00:00:39,760
تا 2 تا 31 منهای خواهند بود. 1.
19
00:00:39,760 –> 00:00:41,520
توجه داشته باشید که شما مجاز به استفاده از
20
00:00:41,520 –> 00:00:43,280
هیچ تابع داخلی که
21
00:00:43,280 –> 00:00:45,600
رشته ها را به عنوان عبارات ریاضی ارزیابی می کند،
22
00:00:45,600 –> 00:00:47,039
مانند eval
23
00:00:47,039 –> 00:00:48,079
24
00:00:48,079 –> 00:00:49,840
ندارید، بنابراین اگر قبلاً ویدیوی من را در
25
00:00:49,840 –> 00:00:52,320
ماشین حساب پایه 1 و ماشین حساب اولیه
26
00:00:52,320 –> 00:00:53,120
2 ندیده اید،
27
00:00:53,120 –> 00:00:55,360
این ویدیو را مکث کنید و به تماشای آن دو بروید
28
00:00:55,360 –> 00:00:56,800
زیرا ما از بسیاری از
29
00:00:56,800 –> 00:00:58,719
مفاهیم مشابهی که در آن ویدیوها استفاده کردیم
30
00:00:58,719 –> 00:01:01,039
برای حل این سوال استفاده خواهیم کرد که در
31
00:01:01,039 –> 00:01:03,280
واقع فقط ترکیبی از دو اوه،
32
00:01:03,280 –> 00:01:06,000
اما بسیار آزاردهنده تر، زیرا اکنون
33
00:01:06,000 –> 00:01:07,920
باید با پرانتزها و
34
00:01:07,920 –> 00:01:09,520
ضرب و تقسیم سر و کار داشته باشیم که
35
00:01:09,520 –> 00:01:11,119
همه چیز را بسیار
36
00:01:11,119 –> 00:01:12,560
دردسرساز می کند، اما
37
00:01:12,560 –> 00:01:14,240
برو ببین آن ویدیوها به این یکی برمی گردند
38
00:01:14,240 –> 00:01:17,600
و ما آن را حل می کنیم، پس
39
00:01:17,600 –> 00:01:19,680
بیایید نگاه کنیم نمونه ای از این
40
00:01:19,680 –> 00:01:21,200
رشته به ظاهر ظالمانه
41
00:01:21,200 –> 00:01:24,159
و از ما خواسته می شود آن را ارزیابی کنیم تا
42
00:01:24,159 –> 00:01:26,479
همانطور که می بینید خروجی باید 21 باشد،
43
00:01:26,479 –> 00:01:28,799
اما چگونه می توانیم به این خوبی برسیم، می دانیم که
44
00:01:28,799 –> 00:01:30,560
باید به ترتیب عملیات ها احترام بگذاریم،
45
00:01:30,560 –> 00:01:32,320
به این معنی که باید
46
00:01:32,320 –> 00:01:34,799
ارزیابی کنیم همه چیز داخل پرانتز
47
00:01:34,799 –> 00:01:36,479
ابتدا
48
00:01:36,479 –> 00:01:39,680
5 به علاوه 5 ضربدر 2 بنابراین بدیهی است که 5
49
00:01:39,680 –> 00:01:41,759
ضربدر 2 ابتدا به دلیل ترتیب عملیات رخ می
50
00:01:41,759 –> 00:01:44,159
دهد بنابراین 10 به علاوه 5 است. بنابراین این
51
00:01:44,159 –> 00:01:47,280
بدان معنی است که کل این چیز 15 است. در اینجا
52
00:01:47,280 –> 00:01:50,240
6 بر 2 تقسیم می شود بنابراین 3 به اضافه می شود 8
53
00:01:50,240 –> 00:01:52,000
پس این 11 است.
54
00:01:52,000 –> 00:01:53,520
بنابراین اکنون ما 2
55
00:01:53,520 –> 00:01:56,960
ضربدر 15 زمان Uh تقسیم بر 3 به اضافه 11
56
00:01:56,960 –> 00:01:58,799
داریم. بنابراین می توانیم این کارها را به هر ترتیبی انجام دهیم
57
00:01:58,799 –> 00:02:01,040
مهم نیست بنابراین ابتدا بر 3 تقسیم می
58
00:02:01,040 –> 00:02:04,000
کنیم تا این تبدیل به 5 شود.
59
00:02:04,000 –> 00:02:06,240
ما 2 ضربدر 10 می گیریم.
60
00:02:06,240 –> 00:02:08,399
متاسفم 2 ضربدر 5
61
00:02:08,399 –> 00:02:10,800
به اضافه 11. پس این بدیهی است
62
00:02:10,800 –> 00:02:11,840
که 10
63
00:02:11,840 –> 00:02:15,520
به علاوه 11 خواهد بود و ما 21 را دریافت می کنیم.
64
00:02:15,520 –> 00:02:18,640
بنابراین در تئوری این است که چگونه این مشکل را حل می کنیم،
65
00:02:18,640 –> 00:02:20,319
اما چگونه می توانیم یک الگوریتم را کنار هم قرار دهیم
66
00:02:20,319 –> 00:02:21,840
زیرا
67
00:02:21,840 –> 00:02:23,360
انجام این کار
68
00:02:23,360 –> 00:02:25,440
در کد بسیار سخت تر از نگاه کردن به آن است، بنابراین
69
00:02:25,440 –> 00:02:26,959
اجازه دهید به این فکر کنید که چگونه می توانیم این را تجزیه کنیم
70
00:02:26,959 –> 00:02:29,120
و در واقع نوعی
71
00:02:29,120 –> 00:02:30,480
راه حل برای آن
72
00:02:30,480 –> 00:02:32,800
73
00:02:32,800 –> 00:02:34,959
بنویسیم.
74
00:02:34,959 –> 00:02:37,360
75
00:02:37,360 –> 00:02:39,360
76
00:02:39,360 –> 00:02:42,160
و واقعا کثیف است
77
00:02:42,160 –> 00:02:43,680
و من آن را در ویدیو قرار نمی دهم،
78
00:02:43,680 –> 00:02:45,519
بنابراین کاری که می خواهم انجام دهم این است
79
00:02:45,519 –> 00:02:46,959
که در واقع کد را می نویسم و
80
00:02:46,959 –> 00:02:48,640
شاید در پایان نوشتن کد
81
00:02:48,640 –> 00:02:51,200
واقعاً فقط یک مثال را مرور کنید
82
00:02:51,200 –> 00:02:54,400
و سپس به نوعی
83
00:02:54,400 –> 00:02:56,000
آن را مرور کنید، گویی یک
84
00:02:56,000 –> 00:02:57,280
مشکل واقعی است، ما میتوانیم به متغیرها نگاه کنیم
85
00:02:57,280 –> 00:02:58,560
86
00:02:58,560 –> 00:02:59,760
و به این ترتیب
87
00:02:59,760 –> 00:03:01,360
احتمالاً بسیار تمیزتر از این خواهد بود که من سعی کنم
88
00:03:01,360 –> 00:03:03,280
آن را با ابزار خود ترسیم کنم. ماوس خیلی
89
00:03:03,280 –> 00:03:05,440
کثیف شده خیلی زشت است و
90
00:03:05,440 –> 00:03:07,760
کمکی نمی کند پس
91
00:03:07,760 –> 00:03:09,680
بیایید در واقع این را حل کنیم
92
00:03:09,680 –> 00:03:11,440
به یاد داشته باشید که برای پیگیری محاسبات خود به چند متغیر نیاز داریم،
93
00:03:11,440 –> 00:03:13,599
بنابراین
94
00:03:13,599 –> 00:03:15,040
میخواهیم بگوییم که عدد فعلی
95
00:03:15,040 –> 00:03:16,480
که با آن کار میکنیم، آن را
96
00:03:16,480 –> 00:03:18,159
برابر صفر قرار میدهیم، زیرا بدیهی است که
97
00:03:18,159 –> 00:03:19,920
ما پناه هر چیزی را پردازش نکردهایم و
98
00:03:19,920 –> 00:03:21,920
عملیات فعلی یک امتیاز مثبت خواهد بود
99
00:03:21,920 –> 00:03:23,360
و ما همچنین یک پشته
100
00:03:23,360 –> 00:03:26,080
در اینجا خواهیم داشت که عناصر ما را نگه میدارد
101
00:03:26,080 –> 00:03:28,080
و در این سؤال ما در واقع
102
00:03:28,080 –> 00:03:29,760
نتیجه را در حال محاسبه
103
00:03:29,760 –> 00:03:31,760
نمیکنیم. همانطور که از چپ به راست می رویم، در
104
00:03:31,760 –> 00:03:33,519
واقع فقط اعدادی را در
105
00:03:33,519 –> 00:03:35,040
پشته خود قرار می دهیم
106
00:03:35,040 –> 00:03:37,040
که در پایان می توان خلاصه کرد که
107
00:03:37,040 –> 00:03:38,400
کمی متفاوت از
108
00:03:38,400 –> 00:03:40,720
ماشین حساب اصلی 1 و ماشین حساب اولیه 2 است
109
00:03:40,720 –> 00:03:42,319
که متأسفانه با این مشکل در جای خود آنها را انجام می دادیم.
110
00:03:42,319 –> 00:03:43,840
شما
111
00:03:43,840 –> 00:03:45,519
نمی توانید این کار را انجام دهید،
112
00:03:45,519 –> 00:03:47,840
باید از فضای اضافی استفاده کنید و
113
00:03:47,840 –> 00:03:49,280
روشی که قرار است این کار را انجام دهیم این است که ما
114
00:03:49,280 –> 00:03:50,879
آن را طوری می سازیم که در پایان
115
00:03:50,879 –> 00:03:52,239
فقط بتوانیم تمام عناصر موجود در
116
00:03:52,239 –> 00:03:53,920
پشته را جمع کنیم و این کار را انجام می دهیم. راه حل نهایی خود را به ما بدهید
117
00:03:53,920 –> 00:03:55,360
118
00:03:55,360 –> 00:03:57,599
تا کمی نیاز داشته باشیم از یک
119
00:03:57,599 –> 00:03:59,519
تابع کمکی برای کمک به ما در ریاضیات در اینجا،
120
00:03:59,519 –> 00:04:01,439
بنابراین بیایید آن را تعریف کنیم و این
121
00:04:01,439 –> 00:04:03,120
تابع
122
00:04:03,120 –> 00:04:05,519
کمکی یک عملیات را می گیرد و یک عدد می گیرد و ما فقط
123
00:04:05,519 –> 00:04:07,519
باید اساساً چیزها را
124
00:04:07,519 –> 00:04:09,920
بر اساس هر عملیاتی در پشته خود قرار دهیم
125
00:04:09,920 –> 00:04:11,680
و عدد ما هر چه باشد، بنابراین
126
00:04:11,680 –> 00:04:15,519
میخواهیم بگوییم که اگر عملیات یک مثبت است،
127
00:04:15,519 –> 00:04:17,040
پس کاری که میخواهیم انجام دهیم این است که میخواهیم
128
00:04:17,040 –> 00:04:18,639
بگوییم
129
00:04:18,639 –> 00:04:20,959
ضمیمه را پشته کنید و اگر عملیات منهای ما باشد،
130
00:04:20,959 –> 00:04:22,400
عدد را در آنجا قرار
131
00:04:22,400 –> 00:04:26,160
میدهیم.
132
00:04:26,160 –> 00:04:29,680
میخواهیم بگوییم stack append منهای عدد
133
00:04:29,680 –> 00:04:33,520
اگر عملیات یک ضرب است،
134
00:04:33,520 –> 00:04:35,360
کاری که میخواهیم انجام دهیم این است که بگوییم stack the
135
00:04:35,360 –> 00:04:38,960
append را میخواهیم بگوییم stack.pop
136
00:04:38,960 –> 00:04:41,440
در عدد فعلی ضرب میشود
137
00:04:41,440 –> 00:04:44,800
و نیازی به باز کردن نیست.
138
00:04:44,800 –> 00:04:46,560
ما یک
139
00:04:46,560 –> 00:04:48,720
ضرب را می بینیم زیرا دوباره در حال
140
00:04:48,720 –> 00:04:50,880
انجام نیستیم، ما آن را تنظیم کرده ایم که
141
00:04:50,880 –> 00:04:52,800
در واقع می توانیم تمام
142
00:04:52,800 –> 00:04:54,639
عناصر را با هم جمع کنیم، بنابراین چون در حال انجام
143
00:04:54,639 –> 00:04:57,600
این کار هستیم، در واقع نیازی به باز
144
00:04:57,600 –> 00:04:59,199
کردن نتیجه قبلی نداریم. فقط
145
00:04:59,199 –> 00:05:00,960
هر کاری که بالای پشته است را انجام دهید
146
00:05:00,960 –> 00:05:03,600
برابر عدد فعلی وقتی ضرب می بینیم در
147
00:05:03,600 –> 00:05:07,360
غیر این صورت اگر
148
00:05:07,360 –> 00:05:09,120
تقسیم
149
00:05:09,120 –> 00:05:11,600
داشته باشیم در واقع می گوییم ضمیمه را پشته
150
00:05:11,600 –> 00:05:13,360
کنید و
151
00:05:13,360 –> 00:05:17,039
عدد صحیح هر stack.pop را
152
00:05:17,039 –> 00:05:19,680
تقسیم بر num قرار می دهیم و دوباره فقط
153
00:05:19,680 –> 00:05:21,919
تقسیم منظم را انجام می دهیم و ما آن را به یک
154
00:05:21,919 –> 00:05:24,560
int میزنیم زیرا وقتی
155
00:05:24,560 –> 00:05:26,880
در پایتون تقسیم اعداد صحیح را با اعداد منفی انجام میدهید،
156
00:05:26,880 –> 00:05:28,560
به درستی گرد نمیشود یا حداقل
157
00:05:28,560 –> 00:05:30,320
به شکلی که شما میخواهید دور نمیشود، بنابراین
158
00:05:30,320 –> 00:05:33,360
برای جلوگیری از اینکه ما در واقع فقط از Uh
159
00:05:33,360 –> 00:05:37,360
منظم استفاده کنیم. تقسیم بندی و عدد صحیح ریخته می شود، بنابراین
160
00:05:37,360 –> 00:05:39,600
اکنون می توانیم رشته خود را
161
00:05:39,600 –> 00:05:41,039
از چپ به راست پردازش کنیم، همانطور که با
162
00:05:41,039 –> 00:05:42,639
سایر ماشین حساب های اصلی انجام دادیم، بنابراین می
163
00:05:42,639 –> 00:05:44,560
خواهیم بگوییم 4i
164
00:05:44,560 –> 00:05:47,840
در محدوده لنز،
165
00:05:47,840 –> 00:05:49,039
کاری که می خواهیم انجام دهیم این است که می خواهیم
166
00:05:49,039 –> 00:05:50,880
اگر s از
167
00:05:50,880 –> 00:05:53,520
نقطه i رقمی است، بنابراین اساساً اگر یک
168
00:05:53,520 –> 00:05:56,000
عدد است، باید آن را پردازش کنیم و
169
00:05:56,000 –> 00:05:57,520
به یاد داشته باشید که
170
00:05:57,520 –> 00:05:59,360
همیشه تنها یک رقمی نیست، می توانیم
171
00:05:59,360 –> 00:06:02,160
چندین اعداد مانند یک دو یکی دو
172
00:06:02,160 –> 00:06:03,919
سه را بشناسیم، بنابراین باید پردازش کنیم. همه
173
00:06:03,919 –> 00:06:05,919
اعداد، بنابراین ما میخواهیم بگوییم عدد هر چه
174
00:06:05,919 –> 00:06:08,319
باشد عدد فعلی ضربدر 10 به اضافه
175
00:06:08,319 –> 00:06:11,199
عدد صحیح هر مقدار فعلی ما است،
176
00:06:11,199 –> 00:06:13,039
بنابراین
177
00:06:13,039 –> 00:06:14,240
178
00:06:14,240 –> 00:06:16,080
اگر
179
00:06:16,080 –> 00:06:19,039
یک پرانتز چپ داشته باشیم، کاری که میخواهیم
180
00:06:19,039 –> 00:06:21,600
انجام دهیم این است که اگر در ماشینحساب اصلی 1 به یاد داشته باشید،
181
00:06:21,600 –> 00:06:23,600
وقتی یک
182
00:06:23,600 –> 00:06:26,400
پرانتز چپ داریم، میخواهیم آن را پیگیری کنیم. از
183
00:06:26,400 –> 00:06:28,639
هر عملی که در حال انجام است، به
184
00:06:28,639 –> 00:06:29,759
این ترتیب وقتی از
185
00:06:29,759 –> 00:06:32,080
پرانتز بیرون آمدیم، میتوانیم نتیجه
186
00:06:32,080 –> 00:06:34,400
داخل پرانتز را با عملگر اعمال کنیم
187
00:06:34,400 –> 00:06:36,400
و سپس مقدار قبل از آن
188
00:06:36,400 –> 00:06:38,240
را اعمال کنیم، بنابراین در واقع باید آن را در
18