暑假算法7.31,Day30
最后一天啦!!
回文/数论
第一题
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> nums = new ArrayList<Integer>();
ListNode node = head;
while (node != null) {
nums.add(node.val);
node = node.next;
}
int size = nums.size();
for (int i = (size - 1) / 2; i >= 0; i--) {
int j = size - 1 - i;
if (nums.get(i) != nums.get(j)) {
return false;
}
}
return true;
}
}
第二题
class Solution {
public:
vector<vector<string>> result;
vector<string> combine;
string A,B;
void backtracking(string str){
string tmp = str;
reverse(tmp.begin(),tmp.end());
if(tmp==str){
combine.push_back(str);
result.push_back(combine);
combine.pop_back();
if(str.size()==1) return;
}
for(int i=1;i<str.size();i++){
A = str.substr(0,i);
B = str.substr(i,str.size()-i);
string tmp = A;
reverse(tmp.begin(),tmp.end());
if(tmp!=A) continue;
combine.push_back(A);
backtracking(B);
combine.pop_back();
cout<<combine[0];
}
}
vector<vector<string>> partition(string s) {
result.clear();
combine.clear();
backtracking(s);
return result;
}
};
第三题
class Solution {
public:
int get(int x)
{
string a=to_string(x);
string b=a;
reverse(b.begin(),b.end());
return stoi(a+b.substr(1));
}
bool is_prime(int n){
if(n<2) return false;
for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
int primePalindrome(int n) {
//偶数个数的回文串都是11的倍数,所以不是素数
//那么偶数个数的回文素数只有11
if(n>7&&n<=11) return 11; //如果是8到11范围内的数要求是回文数并且又是素数就都是11
//判断奇数个数的回文素数
for(int i=1;;i++){
int x=get(i); //得到以i为一半的回文数字
if(n<=x&&is_prime(x)){
return x;
}
}
}
};