7.31算法打卡..

小白哆啦 2022-07-31 23:30:38

题目一

剑指 Offer II 027. 回文链表

难度简单67

给定一个链表的 头节点 head 请判断其是否为回文链表。

如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。

示例 1:

img

输入: head = [1,2,3,3,2,1]
输出: true

示例 2:

img

输入: head = [1,2]
输出: false

提示:

  • 链表 L 的长度范围为 [1, 105]
  • 0 <= node.val <= 9

进阶:能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

解答过程

`
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head){
        //把头结点存起来
        ListNode l = head;
        //求链表长度
        int size=0;
        while(head!=null){
            size++;
            head=head.next;
        }
        head = l;
        int[] ans = new int[size];
        //把链表放进数组中
        for(int i=0;i<size;i++){
            ans[i] = head.val;
            head=head.next;
        }
        //双指针遍历
        int left=0,right = size-1;
            while(left<right){
                if(ans[left]!=ans[right]){
                    return false;
                }
                left++;
                right--;
            }
        
        return true;
    }
}

结果为

img

题目二

131. 分割回文串

难度中等1215

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

解答过程

class Solution {
    boolean[][] flag; 
    List<List<String>> list1 = new ArrayList<List<String>>();
    List<String> list2 = new ArrayList<String>();
    int n;
    public List<List<String>> partition(String s) {
         n=s.length();
        flag = new boolean[n][n];
        for (int i = 0; i < n; ++i) {
            Arrays.fill(flag[i], true);
        }
        for (int i = n - 1; i >= 0; --i) {
            for (int j = i + 1; j < n; ++j) {
                flag[i][j] = (s.charAt(i) == s.charAt(j)) && flag[i + 1][j - 1];
            }
        }
        dfs(s,0);
        return list1;
    }
    private void dfs(String s,int i){
        //递归结束条件
        if(i==n){
            list1.add(new ArrayList<String>(list2));
            return;
        }
        for(int j=i;j<n;j++){
            if(flag[i][j]){
                list2.add(s.substring(i,j+1));
                dfs(s,j+1);
                list2.remove(list2.size() - 1);
            }
        }
    }
}

结果为

img

题目三

866. 回文素数

难度中等81

求出大于或等于 N 的最小回文素数。

回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数

例如,2,3,5,7,11 以及 13 是素数。

回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。

例如,12321 是回文数。

示例 1:

输入:6
输出:7

示例 2:

输入:8
输出:11

示例 3:

输入:13
输出:101

提示:

  • 1 <= N <= 10^8
  • 答案肯定存在,且小于 2 * 10^8

解答过程

结果为

题目四

204. 计数质数

难度中等931

给定整数 n ,返回 所有小于非负整数 n 的质数的数量

示例 1:

输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

提示:

  • 0 <= n <= 5 * 106

解答过程

class Solution {
    public int countPrimes(int n) {
        int[] isPrime = new int[n];
        Arrays.fill(isPrime, 1);
        int ans = 0;
        for (int i = 2; i < n; ++i) {
            if (isPrime[i] == 1) {
                ans += 1;
                if ((long) i * i < n) {
                    for (int j = i * i; j < n; j += i) {
                        isPrime[j] = 0;
                    }
                }
            }
        }
        return ans;
    }
}

结果为

img

...全文
41 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,781

社区成员

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

 刷题!

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