| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | func nearestPalindromic(n string) string {	set := make([]int, 0, 5)	l := len(n)	set = append(set, int(math.Pow10(l))+1)	set = append(set, int(math.Pow10(l-1))-1)	r1, r2, r3 := []rune(n), []rune(n), []rune(n)	beg, end := l/2-1+l&1, l/2	if r1[beg] != '0' {		r1[beg]--	}	if r3[beg] != '9' {		r3[beg]++	}	for ; end < l; beg, end = beg-1, end+1 {		r1[end] = r1[beg]		r2[end] = r2[beg]		r3[end] = r3[beg]	}	n1, _ := strconv.Atoi(string(r1))	n2, _ := strconv.Atoi(string(r2))	n3, _ := strconv.Atoi(string(r3))	set = append(set, n1)	set = append(set, n2)	set = append(set, n3)	num, _ := strconv.Atoi(n)	min, res := math.MaxInt32, math.MaxInt32	for _, i := range set {		if det := abs(num - i); det != 0 && det < min || (det == min && i < res) {			min, res = det, i		}	}	return strconv.Itoa(res)}func minInt(x, y int) int {	if x < y {		return x	}	return y}func abs(x int) int {	if x < 0 {		return -x	}	return x}
 |