leetcode 279. 完全平方数 and 203. 移除链表元素

600 阅读2分钟

这是我参与更文挑战的第11天 ,活动详情查看更文挑战 image.png

题目一

给定正整数 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

}

在这里插入图片描述