LeetCode刷题记录,字符串相乘(模拟竖式计算),简化路径(栈)

在这里插入图片描述
这种用字符串模拟数字,无论加法乘法一般都是模拟人竖式计算的过程,比如加法可以拆解为每一位对应的加法,然后只保留余数,进位就放到下一位之后一起加。
这里乘法也是一个道理,乘法根据分配律可以拆分为,比如123 x 456 = 123x(400+50 +6) ,只需要用被拆开的数字分别与123的每一位相乘即可,如果存在进位就加到下一位的结果上。当每个位数乘完再全部加起来就是答案了。

class Solution {
    public String multiply(String num1, String num2) {
        int[] ans = new int[num1.length()+num2.length()];
        for(int i=num1.length()-1;i>=0;i--){
            int ii = num1.charAt(i)-'0';
            for(int j =num2.length()-1;j>=0;j--){
                int jj = num2.charAt(j)-'0';
                int inx = num1.length()+num2.length()-2-i-j;
                ans[inx] += ii*jj%10;
                ans[inx+1] += ii*jj/10+ans[inx]/10;
                ans[inx] %=10;
            }
        }
        boolean f = false;
        StringBuilder sb = new StringBuilder();
        for(int i=ans.length-1;i>=0;i--){
            if(!f&&ans[i]==0)
                continue;
            f = true;
            sb.append(ans[i]);
        }
        String a = sb.length()==0?"0":sb.toString();
        return a;
    }
}

在这里插入图片描述
首先将每层的名字,每层名字是用‘/’进行分割的,存入一个栈中。如果是常规路径名就直接存入,如果遇到…就弹出上一次存入的名字,其他情况都直接跳过(比如空,或者.)。
然后再遍历栈,在‘/’与栈中输出进行组合,存入一个字符串中。

class Solution {
public String simplifyPath(String path) {
        String[] sArr = path.split("/");
        Stack<String> stack = new Stack<>();
        for(String s:sArr){
            if(s.equals("..")){
                if(!stack.isEmpty())
                    stack.pop();
            }else if(!s.equals(".")&&s.length()!=0){
                stack.push(s);
            }
        }
        StringBuilder sb = new StringBuilder();
        for(String s:stack){
            sb.append("/").append(s);
        }
        if(sb.length()==0)
            return "/";
        else
            return sb.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值