50,781
社区成员
发帖
与我相关
我的任务
分享
难度简单67
给定一个链表的 头节点 head
,请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
示例 1:
输入: head = [1,2,3,3,2,1]
输出: true
示例 2:
输入: head = [1,2]
输出: false
提示:
[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;
}
}
难度中等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);
}
}
}
}
难度中等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
难度中等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;
}
}