โปรแกรมเลขพาลินโดรม Java การใช้ while & for Loop
⚡ สรุปอย่างชาญฉลาด
โปรแกรมเลขพาลินโดรม Java อัลกอริทึมนี้ตรวจสอบว่าค่าหนึ่งๆ อ่านได้เหมือนกันทั้งจากหน้าไปหลังและจากหลังไปหน้าหรือไม่ โดยการสลับตัวเลข บทความนี้จะนำเสนออัลกอริทึม เวอร์ชันที่ใช้ลูป while เวอร์ชันที่ใช้ลูป for วิธีการที่ใช้สตริง การเรียกซ้ำ กรณีพิเศษ และการวิเคราะห์ความซับซ้อน พร้อมผลลัพธ์ที่ได้รับการตรวจสอบแล้ว

เลขพาลินโดรมคืออะไร?
A หมายเลขพาลินโดรม จำนวนพาลินโดรม คือจำนวนที่ยังคงเป็นจำนวนเดิมเมื่อสลับตำแหน่งตัวเลข ตัวอย่างเช่น 131 เมื่อสลับตัวเลขแล้วก็ยังคงเป็นจำนวนเดิม จำนวนพาลินโดรมมีสมมาตรแบบสะท้อนที่แกนตั้ง แนวคิดเดียวกันนี้ใช้ได้กับคำที่ยังคงสะกดเหมือนเดิมเมื่อสลับตัวอักษร
ตัวอย่างของเลขพาลินโดรมใน Java
121, 393, 34043, 111, 555, 48084
ตัวอย่างคำพาลินโดรม
LOL, MADAM
ตามนิยามแล้ว ตัวเลขทุกตัวตั้งแต่ 0 ถึง 9 เป็นพาลินโดรม เพราะเมื่อสลับตัวเลขหนึ่งตัวแล้วจะได้ตัวเลขเดิม
อัลกอริทึมจำนวนพาลินโดรม
ด้านล่างนี้คือตรรกะของอัลกอริทึมหาเลขพาลินโดรม Java:
- รับหมายเลขอินพุตที่ต้องตรวจสอบว่าเป็น a ประโยค.
- คัดลอกตัวเลขลงในตัวแปรชั่วคราว แล้วกลับตัวเลขนั้น
- เปรียบเทียบเลขกลับตัวกับเลขเดิม
- ถ้าตัวเลขทั้งสองเหมือนกัน ตัวเลขนั้นเรียกว่า “เลขพาลินโดรม”
- มิเช่นนั้น ตัวเลขนั้นจะไม่ใช่ “เลขพาลินโดรม”
ส่วนที่ต้องระมัดระวังที่สุดคือการกลับค่า การคำนวณทั้งหมดทำโดยใช้เพียงสองวิธีทางคณิตศาสตร์ และตารางด้านล่าง traces ให้กับพวกเขาด้วยค่า 171
| ส่ง | a (จำนวนที่เหลือ) | ล่าสุดDigit = a % 10 | ผลรวม = (ผลรวม * 10) + สุดท้ายDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
หลังจากผ่านขั้นตอนสุดท้าย ผลรวมมีค่าเท่ากับ 171 ซึ่งเท่ากับค่าที่ป้อนเข้ามาในตอนแรก ดังนั้นจึงยืนยันได้ว่าตัวเลขนั้นเป็นพาลินโดรม
วิธีตรวจสอบว่าหมายเลขอินพุตเป็น Palindrome หรือไม่
ด้านล่างนี้คือโปรแกรมตรวจสอบคำพาลินโดรมในภาษา Java โดยใช้ลูป WHILE ลูปจะทำงานต่อไปเรื่อยๆ ตราบใดที่ยังมีตัวเลขเหลืออยู่ และคำสั่ง print จะแสดงสถานะของตัวแปรแต่ละตัวในแต่ละรอบการทำงาน
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Output:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
โปรแกรมตรวจสอบ Palindrome โดยใช้ for loop
ด้านล่างคือ Java โปรแกรมตรวจสอบคำพาลินโดรมโดยใช้ลูป for ส่วนหัวของลูปประกอบด้วยเงื่อนไขการออกจากลูปและการหาร ดังนั้นส่วนเนื้อหาของลูปจะต้องไม่ทำการหารซ้ำอีก
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Output:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️คำเตือน: ข้อผิดพลาดที่เกิดขึ้นบ่อยคือการเก็บไว้ a = a / 10; ภายในเนื้อหาของลูป for ในขณะที่ส่วนหัวมีอยู่แล้ว a /= 10จากนั้นตัวเลขจะถูกหารสองครั้งต่อรอบ โดยจะข้ามตัวเลขครึ่งหนึ่ง และตัวเลขพาลินโดรมแท้ เช่น 121 จะถูกรายงานอย่างไม่ถูกต้องว่าเป็นไม่ใช่พาลินโดรม
โปรแกรมปาลินโดรมใน Java การใช้สตริง Reverse
การแปลงค่าเป็นข้อความช่วยให้ StringBuilder สามารถกลับค่าได้ในการเรียกเพียงครั้งเดียว วิธีเดียวกันนี้ยังใช้ได้กับคำ ซึ่งวิธีการแปลงเป็นตัวเลขไม่สามารถจัดการได้
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code Output:
true true false
โปรแกรมปาลินโดรมใน Java การใช้การเรียกซ้ำ
การเรียกซ้ำจะเปรียบเทียบตัวอักษรคู่ที่อยู่นอกสุด แล้วเรียกตัวเองซ้ำอีกครั้งในส่วนตรงกลางที่เล็กลงเรื่อยๆ เมธอดจะหยุดทำงานเมื่อเหลือตัวอักษรน้อยกว่าสองตัว
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code Output:
34043 is palindrome: true 12345 is palindrome: false
กรณีพิเศษและการเปรียบเทียบวิธีการ
อินพุตสามตัวจะทำให้การใช้งานแบบง่ายๆ ล้มเหลว ดังนั้นทุกเวอร์ชันควรได้รับการทดสอบกับอินพุตเหล่านั้นก่อนใช้งาน
- ตัวเลขติดลบ: ค่าต่างๆ เช่น -121 ไม่ใช่พาลินโดรม เพราะเครื่องหมายลบไม่มีตัวตรงข้ามที่ท้ายสุด ระวังด้วย
if (inputNumber < 0) return false;. - เลขศูนย์ต่อท้าย: ค่า 100 กลับกลายเป็น 1 ดังนั้นการเปรียบเทียบจึงได้ผลลัพธ์เป็นเท็จอย่างถูกต้อง มีเพียงเลข 0 เท่านั้นที่ผ่านเกณฑ์ในกลุ่มค่าที่ลงท้ายด้วยศูนย์
- ค่าจำนวนเต็มเกินขีดจำกัด: Revการส่งค่าจำนวนเต็มขนาดใหญ่ เช่น 1,999,999,999 อาจเกินขอบเขตของจำนวนเต็ม ดังนั้นควรประกาศตัวแปร sum เป็น long เมื่อค่าที่ป้อนเข้ามาอาจเข้าใกล้ขีดจำกัด
ตารางด้านล่างนี้เปรียบเทียบวิธีการทั้งสี่วิธีที่แสดงในหน้านี้
| วิธี | ความซับซ้อนของเวลา | ความซับซ้อนของอวกาศ | ใช้งานได้สำหรับคำต่างๆ | หมายเหตุ : |
|---|---|---|---|---|
| ในขณะที่วนซ้ำ | O (บันทึก n) | O (1) | ไม่ | ตัวอย่างที่ชัดเจนที่สุดของการสลับตัวเลข |
| สำหรับห่วง | O (บันทึก n) | O (1) | ไม่ | ตรรกะเหมือนกัน เพียงแต่แบ่งเฉพาะส่วนหัวเท่านั้น |
| ตัวสร้างสตริงแบบย้อนกลับ | O (n) | O (n) | มี (ใบกำกับภาษีเต็มรูปแบบ) | โค้ดที่สั้นที่สุด สร้างสตริงใหม่ |
| Recursion | O (n) | สแต็ก O(n) | มี (ใบกำกับภาษีเต็มรูปแบบ) | มีประโยชน์สำหรับการสนทนาสัมภาษณ์เกี่ยวกับเรื่องการเรียกซ้ำ |
ตัวเลข extracรูปแบบที่ใช้ในที่นี้จะปรากฏขึ้นอีกครั้งในแบบฝึกหัดหลายๆ ข้อ ดำเนินการต่อด้วย ลำดับฟิโบนาชี่ใน Javaที่ Java โปรแกรมตรวจสอบจำนวนเฉพาะและ Bubble เรียงลำดับอัลกอริทึมใน Javaสำหรับไวยากรณ์ของลูป โปรดดูที่... สำหรับแต่ละลูปใน Java และกว้างขึ้น Java เกี่ยวกับการสอนและดู Java เงื่อนไข สำหรับวิธีการที่ใช้ข้อความเป็นหลัก
