这是我参与更文挑战的第11天
,活动详情查看更文挑战
题目一
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
示例 1:
输入:n = 12 输出:3 解释:12 = 4 + 4 + 4 示例 2:
输入:n = 13 输出:2 解释:13 = 4 + 9
解题思路
数组定义
dp[i]代表和为 i 的完全平方数的 最少数量
转态转移
遍历所有当前情况下,可以选择的平方数
dp[i]=Math.min(dp[i-j*j]+1,dp[i]);
从和为i-j*j的情况转移而来
代码
class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
Arrays.fill(dp,Integer.MAX_VALUE);
dp[0]=0;
for (int i=1;i<=n;i++)
{
for (int j=1;j*j<=i;j++) {
dp[i]=Math.min(dp[i-j*j]+1,dp[i]);
}
}
return dp[n];
}
}
题目二
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2:
输入:head = [], val = 1 输出:[] 示例 3:
输入:head = [7,7,7,7], val = 7 输出:[]
解题思路
遍历一次链表,将链表中所有满足 Node.val == val 的节点删除,就是维护该节点的前驱节点,将前驱节点连接到后置节点上面
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeElements(head *ListNode, val int) *ListNode {
dumpy := &ListNode{Next: head}
pre:=dumpy
for head!=nil {
if head.Val==val{
pre.Next=head.Next
head=pre.Next
}else {
pre=head
head=head.Next
}
}
return dumpy.Next
}