|  | @@ -0,0 +1,47 @@
 | 
	
		
			
				|  |  | +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
 | 
	
		
			
				|  |  | +}
 |