Enumeration 
      
    
      
      
      
        Math 
      
    
   
  
    
      
       
  
  
    
      
    
    
      
       
  
Description 
You are given two positive integers low and high.
An integer x consisting of 2 * n digits is symmetric  if the sum of the first n digits of x is equal to the sum of the last n digits of x. Numbers with an odd number of digits are never symmetric.
Return the number of symmetric  integers in the range  [low, high].
 
Example 1: 
Input:  low = 1, high = 100
Output:  9
Explanation:  There are 9 symmetric integers between 1 and 100: 11, 22, 33, 44, 55, 66, 77, 88, and 99.
 
Example 2: 
Input:  low = 1200, high = 1230
Output:  4
Explanation:  There are 4 symmetric integers between 1200 and 1230: 1203, 1212, 1221, and 1230.
 
 
Constraints: 
Solutions 
Solution 1: Enumeration 
We enumerate each integer \(x\)  in the range \([low, high]\) , and check whether it is a palindromic number. If it is, then the answer \(ans\)  is increased by \(1\) .
The time complexity is \(O(n \times \log m)\) , and the space complexity is \(O(\log m)\) . Here, \(n\)  is the number of integers in the range \([low, high]\) , and \(m\)  is the maximum integer given in the problem.
Python3 Java C++ Go TypeScript Rust C# 
class   Solution : 
    def   countSymmetricIntegers ( self ,  low :  int ,  high :  int )  ->  int : 
        def   f ( x :  int )  ->  bool : 
            s  =  str ( x ) 
            if  len ( s )  &  1 : 
                return  False 
            n  =  len ( s )  //  2 
            return  sum ( map ( int ,  s [: n ]))  ==  sum ( map ( int ,  s [ n :])) 
        return  sum ( f ( x )  for  x  in  range ( low ,  high  +  1 )) 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 class  Solution   { 
     public   int   countSymmetricIntegers ( int   low ,   int   high )   { 
         int   ans   =   0 ; 
         for   ( int   x   =   low ;   x   <=   high ;   ++ x )   { 
             ans   +=   f ( x ); 
         } 
         return   ans ; 
     } 
     private   int   f ( int   x )   { 
         String   s   =   ""   +   x ; 
         int   n   =   s . length (); 
         if   ( n   %   2   ==   1 )   { 
             return   0 ; 
         } 
         int   a   =   0 ,   b   =   0 ; 
         for   ( int   i   =   0 ;   i   <   n   /   2 ;   ++ i )   { 
             a   +=   s . charAt ( i )   -   '0' ; 
         } 
         for   ( int   i   =   n   /   2 ;   i   <   n ;   ++ i )   { 
             b   +=   s . charAt ( i )   -   '0' ; 
         } 
         return   a   ==   b   ?   1   :   0 ; 
     } 
} 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 class   Solution   { 
public : 
     int   countSymmetricIntegers ( int   low ,   int   high )   { 
         int   ans   =   0 ; 
         auto   f   =   []( int   x )   { 
             string   s   =   to_string ( x ); 
             int   n   =   s . size (); 
             if   ( n   &   1 )   { 
                 return   0 ; 
             } 
             int   a   =   0 ,   b   =   0 ; 
             for   ( int   i   =   0 ;   i   <   n   /   2 ;   ++ i )   { 
                 a   +=   s [ i ]   -   '0' ; 
                 b   +=   s [ n   /   2   +   i ]   -   '0' ; 
             } 
             return   a   ==   b   ?   1   :   0 ; 
         }; 
         for   ( int   x   =   low ;   x   <=   high ;   ++ x )   { 
             ans   +=   f ( x ); 
         } 
         return   ans ; 
     } 
}; 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 func   countSymmetricIntegers ( low   int ,   high   int )   ( ans   int )   { 
     f   :=   func ( x   int )   int   { 
         s   :=   strconv . Itoa ( x ) 
         n   :=   len ( s ) 
         if   n & 1   ==   1   { 
             return   0 
         } 
         a ,   b   :=   0 ,   0 
         for   i   :=   0 ;   i   <   n / 2 ;   i ++   { 
             a   +=   int ( s [ i ]   -   '0' ) 
             b   +=   int ( s [ n / 2 + i ]   -   '0' ) 
         } 
         if   a   ==   b   { 
             return   1 
         } 
         return   0 
     } 
     for   x   :=   low ;   x   <=   high ;   x ++   { 
         ans   +=   f ( x ) 
     } 
     return 
} 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 function   countSymmetricIntegers ( low :   number ,   high :   number ) :   number   { 
     let   ans   =   0 ; 
     const   f   =   ( x :   number ) :   number   =>   { 
         const   s   =   x . toString (); 
         const   n   =   s . length ; 
         if   ( n   &   1 )   { 
             return   0 ; 
         } 
         let   a   =   0 ; 
         let   b   =   0 ; 
         for   ( let   i   =   0 ;   i   <   n   >>   1 ;   ++ i )   { 
             a   +=   Number ( s [ i ]); 
             b   +=   Number ( s [( n   >>   1 )   +   i ]); 
         } 
         return   a   ===   b   ?   1   :   0 ; 
     }; 
     for   ( let   x   =   low ;   x   <=   high ;   ++ x )   { 
         ans   +=   f ( x ); 
     } 
     return   ans ; 
} 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 impl   Solution   { 
     pub   fn   count_symmetric_integers ( low :   i32 ,   high :   i32 )   ->   i32   { 
         let   mut   ans   =   0 ; 
         for   x   in   low ..= high   { 
             ans   +=   Self :: f ( x ); 
         } 
         ans 
     } 
     fn   f ( x :   i32 )   ->   i32   { 
         let   s   =   x . to_string (); 
         let   n   =   s . len (); 
         if   n   %   2   ==   1   { 
             return   0 ; 
         } 
         let   bytes   =   s . as_bytes (); 
         let   mut   a   =   0 ; 
         let   mut   b   =   0 ; 
         for   i   in   0 .. n   /   2   { 
             a   +=   ( bytes [ i ]   -   b'0' )   as   i32 ; 
         } 
         for   i   in   n   /   2 .. n   { 
             b   +=   ( bytes [ i ]   -   b'0' )   as   i32 ; 
         } 
         if   a   ==   b   {   1   }   else   {   0   } 
     } 
} 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 public   class   Solution   { 
     public   int   CountSymmetricIntegers ( int   low ,   int   high )   { 
         int   ans   =   0 ; 
         for   ( int   x   =   low ;   x   <=   high ;   ++ x )   { 
             ans   +=   f ( x ); 
         } 
         return   ans ; 
     } 
     private   int   f ( int   x )   { 
         string   s   =   x . ToString (); 
         int   n   =   s . Length ; 
         if   ( n   %   2   ==   1 )   { 
             return   0 ; 
         } 
         int   a   =   0 ,   b   =   0 ; 
         for   ( int   i   =   0 ;   i   <   n   /   2 ;   ++ i )   { 
             a   +=   s [ i ]   -   '0' ; 
         } 
         for   ( int   i   =   n   /   2 ;   i   <   n ;   ++ i )   { 
             b   +=   s [ i ]   -   '0' ; 
         } 
         return   a   ==   b   ?   1   :   0 ; 
     } 
} 
 
 
    
    
    
    
      
  
    
      
  
     
  GitHub