2022暑假算法训练第30日

a_a 2022-07-31 22:56:50

title: 算法训练第30日
date: 2022-07-31 20:28:25
summary:
tags:
categories:

回文链表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        vector<int> temp;
        while (head != nullptr){
            temp.push_back(head -> val);
            head = head -> next;
        }
        int l = 0,r = temp.size() - 1;
        while (l < r){
            if (temp[l] != temp[r]) return false;
            l++;
            r--;
        }
        return true;
    }
};

分割回文串

class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>> res;
        vector<string> cur;
        dfs(s,cur,res);
        return res;
    }
    bool isPalindrome(string s){
        return s==string(s.rbegin(),s.rend());
    }
    void dfs(string s,vector<string> &cur,vector<vector<string>> &res){
        if (s==""){
            res.push_back(cur);
            return;
        }
        for (int i = 1; i <= s.length(); ++i) {
            string sub=s.substr(0,i);
            if (isPalindrome(sub)){
                cur.push_back(sub);
                dfs(s.substr(i,s.length()-i),cur,res);
                cur.pop_back();
            }
        }
 
    }
 
};

回文素数

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;
            }
        }       
    }
};

计数质数

class Solution {
public:
    // 规律:如果i是质数,那么2i、3i、4i...都不是质数
    // 时间复杂度为O(nlog(logn))
    int countPrimes(int n) {
        int ans = 0; // 表示结果的数量
        vector<bool> notPrimes(n); // 新建一个bool类型、大小为n的数组容器
        for (int i = 2; i < n; i++) {

            if (notPrimes[i]) continue; // 如果不是质数,则跳过当前这个循环
            else ans++; // 是质数,ans要加一
            
            // 如果i是质数,那么2i、3i、4i...都不是质数
            for (int j = i; j < n; j += i) {
                notPrimes[j] = true;
            }
        }
        return ans;
    }
};
...全文
29 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,779

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧