主要考虑两大类情况
1原本是一个对称数
1)当中间的数<9时,只要+1
2)当中间的数=9时,+1之后考虑进位位,然后右边也有相应的井位位
2不是一个对称数时
1)当左边的数大于右边对称的数时,只要将右边的数改成左边的数
2)当左边的数小于右边的数,将中间的数+1,然后按照1中的思路去做
3)两边的数相等,两边都移位
现在直接上代码吧
string getNextSymmetricNumber1(string str){
if(str.size()<1) return string(0);
bool symmtericFlag=isAs(str);
if(symmtericFlag){//whether number is symmetric
if(str[str.size()/2]!='9'){ //the mid digit
str[str.size()/2]+=1;
if(str.size()%2!=1) str[str.size()/2-1]=str[str.size()/2];
}else{//the mid digit is 9(special condition)
int m=str.size()/2;
while(m>=0&&str[m]=='9') str[m--]='0';
if(m<0){
string tmp("1");
tmp+=str;
str=tmp;
}else str[m]+=1;
int i=0,j=str.size()-1;
while(i<j) str[j--]=str[i++];
}
}else{
int mid=str.size()/2,i=mid-1,j;
if(str.size()%2) j=mid+1;
else j=mid;
while(i>=0&&j<str.size()){
if(str[i]==str[j]) ;
else if(str[i]>str[j])
str[j]=str[i];
else{
if(str[mid]!='9'){
str[mid]+=1;
if(str.size()%2==0) str[mid-1]=str[mid];
}else{//the mid digit is 9(special condition)
int m=str.size()/2;
while(m>=0&&str[m]=='9') str[m--]='0';
if(m<0){
string tmp("1");
tmp+=str;
str=tmp;
}else str[m]+=1;
}
int i=0,j=str.size()-1;
while(i<j) str[j--]=str[i++];
break;
}
--i;++j;
}
}
return str;
}