leetcode-238. 除自身以外数组的乘积;73.矩阵置0

63 阅读2分钟

238. 除自身以外数组的乘积

1、定义一个与nums长度相等的数组 // nums = [1 2 3 4]

2、定义前缀积初始值prefix = 1;后缀积初始值postfix = 1;

3、计算前缀积

nums = [1 2 3 4]

  • ans[0] = prefix // ans = [1◻◻◻];prefix = nums[0] * prefix = 1 * 1 = 1
  • ans[1] = prefix // ans = [1 1◻◻];prefix = nums[1] * prefix = 2 * 1 = 2
  • ans[2] = prefix // ans = [1 1 2◻];prefix = nums[2] * prefix = 3 * 2 = 6
  • ans[3] = prefix // ans = [1 1 2 6];(prefix = nums[3] * prefix = 4 * 6 = 24

4、计算后缀积,直接填入ans中

nums = [1 2 3 4]

ans = [1 1 2 6]

  • ans[3] = ans[3] * postfix = 6 * 1 = 6 // ans = [1 1 2 6];postfix = postfix * nums[3] = 1 * 4 = 4
  • ans[2] = ans[2] * postfix = 2 * 6 = 12 // ans = [1 1 12 6];postfix = postfix * nums[2] = 4 * 3 = 12
  • ans[1] = ans[1] * postfix = 1 * 12 = 12 // ans = [1 12 12 6];postfix = postfix * nums[1] = 12 * 1 = 24
  • ans[0] = ans[0] * postfix = 1 * 24 = 24 // ans = [24 12 12 6];postfix = postfix * nums[2] = 24 * 1 = 24
var productExceptSelf = function(nums) {
    let ans = new Array(nums.length);
    let prefix = 1;
    let postfix = 1;
    
    // 计算前缀积
    for(let i = 0; i < nums.length; i++){
        // 将每一个数的前缀积,存到ans中
        ans[i] = prefix;
        prefix = nums[i] * prefix;
    }

    // 计算后缀积
    for(let j = nums.length - 1; j >= 0; j--){
        // 反向遍历 ==> 后缀积 * 前缀积, 并直接返回到ans中
        ans[j] = ans[j] * postfix;   // 总的积 = 前缀积 * 后缀积
        postfix = postfix * nums[j];   // 更新后缀积
    }
    return ans;
};

73.矩阵置0

思路:

二维矩阵,一行为一个数组;

行为0,则该数组为0;

列为0,则每一个数组的该下标位置元素 置为0;

var setZeroes = function(matrix) {
    let cols = new Array(matrix[0].length).fill(1);
    let rows = new Array(matrix[0].length).fill(1);
  
    for(let i = 0; i < matrix.length; i++){
        for(let j = 0; j < matrix[i].length; j++){
            if(matrix[i][j] === 0){
                rows[i] = 0;
                cols[j] = 0;
            }
        }
    }

    for(let i = 0; i < matrix.length; i++){
        if(rows[i] === 0){
           // 行  该数组全为0
            matrix[i].fill(0);
        }
    }
    
    for(let j = 0; j < cols.length; j++){
        if(cols[j] === 0){
            for(let i = 0; i < matrix.length; i++){
                // 列  j下标元素为0
                matrix[i][j] = 0;
            }
        }
    }
};