我在一篇leetcode文章中遇到了以下内容,以确定整数是否是回文
现在让我们考虑如何还原数字的后半部分。对于数字 1221,如果我们做 1221 % 10,我们得到最后一个数字 1,要得到倒数第二个数字,我们需要从 1221 中删除最后一个数字,我们可以将其除以 10,1221/10 = 122。然后我们可以通过将模数乘以 10、122 % 10 = 2 来再次获得最后一个数字,如果我们将最后一个数字乘以 10 并加上倒数第二个数字 1 * 10 + 2 = 12,它给了我们想要的恢复数字。继续此过程将为我们提供具有更多数字的还原数字。
现在的问题是,我们怎么知道我们已经达到了数字的一半?
由于我们将数字除以 10,然后将反转的数字乘以 10,当原始数字小于反向数字时,这意味着我们已经处理了一半的数字。
有人可以解释最后两句话吗?!谢谢!
下面是随附的 C# 代码:
public class Solution {
public bool IsPalindrome(int x) {
// Special cases:
// As discussed above, when x < 0, x is not a palindrome.
// Also if the last digit of the number is 0, in order to be a palindrome,
// the first digit of the number also needs to be 0.
// Only 0 satisfy this property.
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while(x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
// When the length is an odd number, we can get rid of the middle digit by revertedNumber/10
// For example when the input is 12321, at the end of the while loop we get x = 12, revertedNumber = 123,
// since the middle digit doesn't matter in palidrome(it will always equal to itself), we can simply get rid of it.
return x == revertedNumber || x == revertedNumber/10;
}
}
原因是由于原始给定的输入,x 将减少 1 位数字,而恢复的字符串同时增加 1 位。该过程将继续进行,直到 x 小于或等于还原的字符串。因此,由于变化长度的变化,当它终止时,我们将大约达到字符串的一半。
让我们访问一些具有正数的示例来了解该过程。我会写 (x,y( 作为(原始数字,还原字符串(。第三个示例是故意设计的,以表明它不需要正好是一半,但代码仍然可以工作。
-
第一个例子是 1221,其中有偶数位数。 它将从 (1221, 0( 到 (122, 1( 再到 (12, 12(,在这个阶段,这两个项相等,因此该过程终止,我们可以得出结论,它是一个回文。
-
下一个示例是 1223,其中有偶数位。 它将从 (1223, 0( 到 (122, 3( 再到 (12, 32(,在此阶段,终止条件成立,因此该过程终止,我们可以得出结论,它不是回文。
现在,第三个例子是 1211, 那么序列是 (1211,0(、(121, 1(、(12,11(、(1,112(,之后我们从字符串终止,它会得出结论,它不是回文
现在,让我们让数字由奇数位数组成:
-
对于 12321。它将从 (12321, 0( 到 (1232, 1( 到 (123, 12( 到 (12, 123(,此时,条件中断。然后我们将恢复的字符串除以 10,我们得到 (12,12(,我们可以得出结论,它是一个回文。
-
对于 12323。它将从 (12323, 0( 到 (1232, 3( 到 (123, 32( 到 (12, 323(,此时,条件中断。然后我们将恢复的字符串除以 10,最终得到 (12,32(,我们可以得出结论,它不是一个回文。
-
对于 12311。它将从 (12311, 0( 到 (1231, 1( 到 (123, 11( 到 (12, 113(,此时,条件中断。然后我们将恢复的字符串除以 10,我们得到 (12,11(,我们可以得出结论,它不是一个回文。
我希望这些例子能帮助你理解这篇文章的意思。