反转 一个整数意味着倒置它的所有位。


例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。

给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。



示例 1:


输入:num = 526

输出:true

解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。

示例 2:


输入:num = 1800

输出:false

解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。

示例 3:


输入:num = 0

输出:true

解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。


提示:


0 <= num <= 106


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/a-number-after-a-double-reversal

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.isNumber;

import java.util.List;

import cn.fansunion.leecode.kit.Kit;

/**

* 2119. 反转两次的数字 <br/>

* 反转 一个整数意味着倒置它的所有位。

*

* 例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。 <br/>

* 给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。 <br/>

* 如果 reversed2 等于 num ,返回 true ;否则,返回 false 。

*

* 来源:力扣(LeetCode) 链接:力扣

* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

*

* @author wen.lei@brgroup.com

*

* 2022-3-9

*/

public class ANumberAfterADoubleReversal {

/*示例 1:



输入:num = 526

输出:true

解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。

示例 2:



输入:num = 1800

输出:false

解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。

示例 3:



输入:num = 0

输出:true

解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。





提示:



0 <= num <= 106*/

/**

* 正常情况:1个数字,反转2次=没有反转,肯定和自己相等。<br/>

* 题目的特点是:“不保留前导零”,正常来说,输入的数字肯定没有“前导零”,那么只用判断末尾是否有0就可以了。0特殊判断。

*

*

* @param num

* @return

*/

public boolean isSameAfterReversals(int num) {

if (num == 0) {

return true;

}

return num % 10 != 0;

}

public boolean isSameAfterReversals2(int num) {

if (num >= 0 && num <= 9) {

return true;

}

List<Integer> numList = Kit.intToDigitList(num);

List<Integer> reverseList = Kit.reverseListThenRemoveStartZero(numList);

List<Integer> reverseList2 = Kit.reverseListThenRemoveStartZero(reverseList);

int num2 = Kit.digitListToInt(reverseList2);

return num == num2;

}

}
package cn.fansunion.leecode.kit;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Set;

/**

* 一些常见的工具类

*

* @author wen.lei@brgroup.com

*

* 2022-1-9

*/

public class Kit {

/**

* 打印数组

*

* @param array

*/

public static void print(int[] array) {

if (array == null) {

System.out.println("The array is null");

return;

}

if (array.length == 0) {

System.out.println("The array length is 0");

return;

}

for (int index = 0; index < array.length; index++) {

System.out.print(array[index]);

if (index != array.length - 1) {

System.out.print(",");

} else {

System.out.println();

}

}

}

public static int[] setToArray(Set<Integer> set) {

int[] nums = new int[set.size()];

int index = 0;

for (Integer num : set) {

nums[index] = num;

index++;

}

return nums;

}

/**

* 把1个十进制的整数,转换成十进制数字组成的数组,1234->[1, 2, 3, 4]

*

* @param n

* @return

*/

public static List<Integer> intToDigitList(int n) {

List<Integer> numList = new ArrayList<>();

while (n >= 10) {

numList.add(0, n % 10);

n = n / 10;

}

numList.add(0, n);

return numList;

}

/**

* 把1个十进制的整数,转换成十进制数字组成的数组,1234->[4, 3, 2, 1]

*

* @param totalSum

* @return

*/

public static List<Integer> intToDigitListDesc(int n) {

// 取模取余

List<Integer> list = new ArrayList<>();

// >=10

while (n >= 10) {

list.add(n % 10);

n = n / 10;

}

list.add(n);

return list;

}

public static void main(String[] args) {

System.out.println(Kit.intToDigitList(1234));

System.out.println(Kit.intToDigitListDesc(1234));

}

/**

* 把一个十进制的整数数组,转换成int格式的数字

*

* @param numArray

* @return

*/

public static int digitListToInt(List<Integer> numList) {

int num = 0;

for (int index = numList.size() - 1; index >= 0; index--) {

final int curDigit = numList.get(index);

final int time = numList.size() - 1 - index;

num += curDigit * Math.pow(10, time);

}

return num;

}

public static int digitArrayToInt(int[] numArray) {

List<Integer> numList = new ArrayList<>();

for (int num : numArray) {

numList.add(num);

}

return digitListToInt(numList);

}

/**

* 反转list,[1,2,3,4] -> [4,3,2,1]

*

* @param numList

* @return

*/

public static List<Integer> reverseList(List<Integer> numList) {

if (numList == null || numList.size() == 1) {

return numList;

}

List<Integer> reverseList = new ArrayList<>();

for (int index = numList.size() - 1; index >= 0; index--) {

reverseList.add(numList.get(index));

}

return reverseList;

}

/**

* 反转list,且删除开头的0;[1,2,3,4] -> [4,3,2,1],<br/>

* [1,2,3,0] -> [0,3,2,1] -> [3,2,1],[1,2,3,0,0] -> [0,0,3,2,1] -> [3,2,1]<br/>

* [0]->[0]

*

* @param numList

* @return

*/

public static List<Integer> reverseListThenRemoveStartZero(List<Integer> numList) {

List<Integer> reverseList = reverseList(numList);

List<Integer> list = removeStartZero(reverseList);

return list;

}

/**

* 删除一个list中的0开头的数字。如果只有1个0,保留 <br/>

* [0,0,3,2,1] -> [3,2,1], [3,2,1] -> [3,2,1],[0]->[0]

*

* @param reverseList

* @return

*/

private static List<Integer> removeStartZero(List<Integer> reverseList) {

// 找到第1个非0的index

int firstNotZeroIndex = -1;

for (int index = 0; index < reverseList.size(); index++) {

int num = reverseList.get(index);

// 非前导0,才保留

if (num != 0) {

firstNotZeroIndex = index;

break;

}

}

if (firstNotZeroIndex == -1) {

return Arrays.asList(0);

}

List<Integer> list = reverseList.subList(firstNotZeroIndex, reverseList.size());

return list;

}

}
package test.leecode.isNumber;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.isNumber.ANumberAfterADoubleReversal;

/**

* @author wen.lei@brgroup.com

*

* 2022-3-12

*/

public class ANumberAfterADoubleReversalTest {

@Test

public void test() {

ANumberAfterADoubleReversal test = new ANumberAfterADoubleReversal();

//one

Assert.assertTrue(test.isSameAfterReversals(1));

Assert.assertTrue(test.isSameAfterReversals(2));

Assert.assertTrue(test.isSameAfterReversals(9));

Assert.assertTrue(test.isSameAfterReversals(0));

//two

Assert.assertTrue(test.isSameAfterReversals(11));

Assert.assertTrue(test.isSameAfterReversals(12));

Assert.assertTrue(test.isSameAfterReversals(78));

Assert.assertFalse(test.isSameAfterReversals(10));

Assert.assertFalse(test.isSameAfterReversals(30));

//three

Assert.assertFalse(test.isSameAfterReversals(180));

Assert.assertTrue(test.isSameAfterReversals(181));

Assert.assertTrue(test.isSameAfterReversals(526));

Assert.assertTrue(test.isSameAfterReversals(123));

//four

Assert.assertFalse(test.isSameAfterReversals(1800));

Assert.assertTrue(test.isSameAfterReversals(1801));

//

Assert.assertTrue(test.isSameAfterReversals(180258941));

Assert.assertFalse(test.isSameAfterReversals(180258940));

}



@Test

public void test2() {

ANumberAfterADoubleReversal test = new ANumberAfterADoubleReversal();

//one

Assert.assertTrue(test.isSameAfterReversals2(1801));

Assert.assertTrue(test.isSameAfterReversals2(1));

Assert.assertTrue(test.isSameAfterReversals2(2));

Assert.assertTrue(test.isSameAfterReversals2(9));

Assert.assertTrue(test.isSameAfterReversals2(0));

//two

Assert.assertTrue(test.isSameAfterReversals2(11));

Assert.assertTrue(test.isSameAfterReversals2(12));

Assert.assertTrue(test.isSameAfterReversals2(78));

Assert.assertFalse(test.isSameAfterReversals2(10));

Assert.assertFalse(test.isSameAfterReversals2(30));

//three

Assert.assertFalse(test.isSameAfterReversals2(180));

Assert.assertTrue(test.isSameAfterReversals2(181));

Assert.assertTrue(test.isSameAfterReversals2(526));

Assert.assertTrue(test.isSameAfterReversals2(123));

//four

Assert.assertFalse(test.isSameAfterReversals2(1800));



//

Assert.assertTrue(test.isSameAfterReversals2(180258941));

Assert.assertFalse(test.isSameAfterReversals2(180258940));

}

}