Zheaoli / do-something-right

MIT License
37 stars 3 forks source link

2022-07-27 #311

Open Zheaoli opened 2 years ago

Zheaoli commented 2 years ago

2022-07-27

gongpeione commented 2 years ago
/*
 * @lc app=leetcode id=27 lang=javascript
 *
 * [27] Remove Element
 */

// @lc code=start
var rmElement = (nums, index) => {
    for (let i = index; i < nums.length; i++) {
        nums[i] = nums[i + 1];
    }
}
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    // let count = 0;

    // for (let i = 0; i < nums.length; i++) {
    //     if (nums[i] === undefined) {
    //         break;
    //     }
    //     if (nums[i] === val) {
    //         rmElement(nums, i);
    //         count++;
    //         i--;
    //     }
    // }

    // return nums.length - count;

    let pointer = 0;
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== val) {
            nums[pointer++] = nums[i];
        }
    }

    return pointer;
};
// @lc code=end

微信id: 弘树 来自 vscode 插件

SaraadKun commented 2 years ago

592. 分数加减运算

class Solution {
    public String fractionAddition(String expression) {
        //因为分母范围为[1,10],分数个数[1,10],故 p= ∏10,i=1 i 一定是所有分母的公倍数
        //遍历输入字符串, 对于每个分数,可以分为符号symbol,分子numerator,分母denominator三部分
        //则该分数在分母为p时的分子为: symbol * numerator * (p / denominator)
        //将所有分子相加,最后对分母p进行化简,即为答案
        int p = 1;
        for (int i = 2; i <= 10; i++) {
            p *= i;
        }
        //分母为p时的分子
        int numerators = 0;
        char[] chs = expression.toCharArray();
        int n = chs.length;
        for (int i = 0; i < n; i++) {
            int symbol, numerator, denominator; 
            int[] arr = new int[3];
            //处理首位符号
            if (i == 0 && chs[i] != '-') {
                symbol = 1;
            } else {
                symbol = chs[i++] == '-' ? -1 : 1;
            }
            //处理分子
            if (chs[i + 1] == '0') {
                numerator = 10;
                i += 2;
            } else {
                numerator = chs[i++] - '0';
            }
            //处理分母
            if (i + 2 < n && chs[i + 2] == '0') {
                denominator = 10;
                i += 2;
            } else {
                denominator = chs[++i] - '0';
            }
            //根据公倍数p计算分子
            numerators += symbol * numerator * (p / denominator);
        }
        StringBuilder sb = new StringBuilder();
        if (numerators < 0) {
            sb.append('-');
            numerators *= -1;
        }
        //计算分子分母最大公约数,化简分数
        int gcd = gcd(p, numerators);
        sb.append(numerators / gcd).append('/').append(p / gcd);
        return sb.toString();
    }

    private int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }
}

纯纯模拟题 WeChat: Saraad