力扣837java

今天做了一道力扣觉着很有意思力扣837 这个做的费点时间 想半天才想通这位大佬写的 看一看
这是我自己的一些理解 这里我改成了void 形式便于输出

package Leetcode;

public class Demo837 {
    /*这题很难理解 其实就是抓牌游戏 N=21 K=17  W=10
    * 我从0开始抓范围是0-w的牌 然后累加 然后当手上的分数不到17可以继续抓 但是只要到了17
    * 比如16抓一个1就到了17  这个时候就不能抓了  让我们求概率 :
    *                               我最后得分不超过 N的概率
    * 其实也就是16的时候抓12345都是赢678910是数 这个被抓比率相同赢得概率是1也相同
    *   但是后面比如15  这个时候你抓到1 之后你赢得概率就是刚刚算类的上面那个概率
    *                 抓到2赢得概率还是1
    *                  所以就想到了一个
*                   16赢得概率等于 (17赢得概率+18+...+26)/10
*                   15的概率等于(16的概率 +17赢得概率+...+26赢得概率)/10
*                    这样就可以用一个数组17+10其实只需要16+10 但是数组开始的地方就是要求的概率
*                   这里其实有点想不通 但是吧就是数是0赢得概率就是我们求的概率 本来我以为是所有0-17概率和想一下
*                 不对 因为16的概率会用到很多地方
* 所以dp【0】就是要求的
*
    * */
    public static void main(String[] args) {

           new21Game(21,17,10);

    }
    public static void new21Game(int N, int K, int W) {

    double[] dp=new double[K+W];
        if (N - K + 1 >= W) {
            dp[0]=1.0;//避免出现特殊案例 比如101
        }
    //给K到N都赋值为1 N到k+w-n都为0
        for (int i = K; i <=N ; i++) {
            dp[i]=1.00;
        }
        double startgailv=N-K+1;
        for (int i = K-1; i >=0 ; i--) {
            dp[i]=startgailv/W;
            startgailv=startgailv-dp[W+i]+dp[i];
        }
        System.out.println(dp[0]);
    }
}

### LeetCode 第844题 Java 实现 LeetCode 的第 844 题名为 **比较含退格的字符串** (Backspace String Compare),其核心在于处理两个字符串中的 `#` 符号表示的退格操作,并判断最终得到的结果是否相等。 以下是该问题的一个高效解决方案: #### 方法描述 通过使用栈的思想来模拟退格操作的效果。对于每一个字符,如果遇到的是普通字母,则将其压入栈中;如果是 `#` 字符,则弹出栈顶元素(前提是栈不为空)。最后比较两个经过处理后的栈内容即可得出结论。 下面是基于上述逻辑的具体实现代码: ```java class Solution { public boolean backspaceCompare(String s, String t) { return build(s).equals(build(t)); // 构建并比较两个字符串的实际结果 } private String build(String str) { StringBuilder sb = new StringBuilder(); // 使用StringBuilder代替显式的Stack结构 for(char c : str.toCharArray()) { if(c != '#') { sb.append(c); // 如果不是'#',加入到结果中 } else if(sb.length() > 0){ sb.deleteCharAt(sb.length()-1); // 如果是'#'且有可删除的内容,则移除最后一个字符 } } return sb.toString(); } } ``` 此方法的时间复杂度为 O(n)[^2] ,其中 n 是输入字符串的最大长度。空间复杂度同样为 O(n)[^3] ,因为我们需要额外的空间存储中间状态。 另一种优化方式可以采用双指针技术从右向左遍历字符串,在跳过应该被忽略的部分之后再做对比。这种方法能够进一步减少内存消耗至常量级别 O(1)[^4] 。然而其实现有一定难度,需注意边界条件以及多种特殊情况下的行为一致性验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值