版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32767041/article/details/86501034
Description
牛客网 2018校招真题 找出最接近的对称数字
Solving Ideas
为了使对称数字最接近,应该尽量保持高位不变,然后修改低位数字从而达到对称。
- 当输入数字已经对称时,选择修改中心的数字,这样能保证更高位不变,从而达到最近的目的,另外需要注意中心数字是否大于0的情况
如:202变为212而不是191,343变为333而不是353(虽然两者到343的距离一样,但题目要求取小的作为答案) - 当输入数字不对称时,直接修改中心往右的低位数字使之对称即可
Time complexity :
Space complexity :
Solution
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author wylu
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] str = br.readLine().toCharArray();
int n = str.length;
if (isPalindrome(str)) {
int mid = n / 2;
if (str[mid] > 0) str[mid] = (char) (str[mid] - 1);
else str[mid] = (char) (str[mid] + 1);
if (n % 2 == 0) str[mid - 1] = str[mid];
} else {
for (int i = (n + 1) / 2, j = (n % 2 == 0) ? 1 : 2; i < n; i++, j += 2) {
str[i] = str[i - j];
}
}
System.out.println(new String(str));
}
private static boolean isPalindrome(char[] str) {
for (int i = 0, j = str.length - 1; i < j; i++, j--) {
if (str[i] != str[j]) return false;
}
return true;
}
}