leetcode刷题(三)java

7.递归与动态规划

动态规划可以看成是把递归结果存放下来,在下次调用时直接取出即可的形式,一般可用于每一步都是离散的,与上一步有关,深度优先搜索等类似题目中。

动态规划解背包问题时注意:

如果求组合数,不同顺序是同一种组合,则循环时物品在外,背包容量在内

如果求排列数,不同顺序是不同结果,则反之。

找零钱

import java.util.*;
public class questionNine {
    public static int change(int amount, int[] coins) {
        int ans =0;
        int[] d =new int[5003];
        d[0]=1;
        Arrays.sort(coins);
        for(int i=0;i<coins.length;i++)
        {
            for(int j=1;j<=amount;j++)
            {
                if(j>=coins[i])
                {
                    d[j]=d[j]+d[j-coins[i]];
                }
            }
        }
        return d[amount];
    }
    public static void main(String[] args) {
        int a=5;
        int[] b={1,2};
        System.out.println(change(a,b));
    }
}

8.回文子串

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

class Solution {
    public static boolean f(String b)
    {
        if(b.length()==1)
        {
            return true;
        }
        int i=0,j=b.length()-1;
        while(i<=j)
        {
            if(b.charAt(i)==b.charAt(j))
            {
                i=i+1;
                j=j-1;
            }
            else
            {
                return false;
            }
            
        }
        return true;
    }
    public int countSubstrings(String s) {
        int ans=0;
        int n=s.length();
        for(int i=0;i<n;i++)
        {
            for(int j=i;j<n;j++)
            {
                if(f(s.substring(i,j+1)))
                {
                    ans=ans+1;
                }
            }
        }
        return ans;

    }
}

9.找不同

给定两个字符串 st,它们只包含小写字母。

字符串 *t* 由字符串 *s* 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

class Solution {
    public char findTheDifference(String s, String t) {
        int m=s.length(),n=t.length();
        char[] a=s.toCharArray();
        char[] b=t.toCharArray();
        Arrays.sort(a);
        Arrays.sort(b);
        for(int i=0;i<m;i++)
        {
            if(a[i]!=b[i])
            {
                return b[i];
            }
        }
        return b[m];
    
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值