題目:2081. k 鏡像數字的和
思路:枚舉10進制的回文串,然后來判斷對應的k進制數是否是回文串。直到有n個滿意即可。
而枚舉10進制的回文串,從基數p(1、10、100… )開始,長度為奇數的回文串,長度為偶數的回文串。
class Solution {
public:typedef long long LL;//判斷十進制u對應的k進制是否是回文串bool pd(LL u,int k){//因為最高位不可能為0,所以當最低為為0時,不合法if(u%k==0) return false;//十進制u變為k進制數的字符串string s="";while(u>0){s.push_back(u%k+'0');u/=k;}//雙指針判斷是否為回文串int l=0,r=s.size()-1;while(l<r){if(s[l]!=s[r]) return false;l++;r--;}return true;}long long kMirror(int k, int n) {LL sum=0;int ans=0;// 基數從1開始,[1,10)、[10,99)...for(int p=1;;p*=10){// 長度為奇數個的字符串 for(int i=p;i<p*10;i++){LL t=i;//從i/10開始,也就是最低位不要for(int x=i/10;x>0;x/=10){t=t*10+x%10;}//判斷對應的k進制是否是回文串if(pd(t,k)){cout<<t<<endl;ans++;sum+=t;}if(ans==n) return sum;}// 長度為偶數個的字符串 for(int i=p;i<p*10;i++){LL t=i;for(int x=i;x>0;x/=10){t=t*10+x%10;}//判斷對應的k進制是否是回文串if(pd(t,k)){cout<<t<<endl;ans++;sum+=t;}if(ans==n) return sum;}}return 0;}
};