【问题标题】:Matrix elements sum矩阵元素总和
【发布时间】:2019-10-20 14:07:51
【问题描述】:

我想得到矩阵元素的总和,除了那些数字为 0 的元素,并得到错误: 未捕获的类型错误:无法设置未定义的属性“0”

function matrixElementsSum(matrix) {
let s = 0;
for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j <= matrix.length; j++) {
        if (matrix[i][j] == 0) {
            matrix[i+1][j] = 0;
        }
        s += matrix[i][j]
    }
}
return s
}
console.log(matrixElementsSum([[0, 1, 2, 0], 
                               [0, 3, 2, 1], 
                               [2, 0, 2, 3]]))

【问题讨论】:

  • 'i' 或 'j' 可能不正确并且索引不存在
  • 你的外循环应该迭代到行数,内循环应该迭代到列数。
  • 现在我明白了,谢谢))

标签: javascript matrix


【解决方案1】:

您的循环计数器 i 应该迭代行数,而 j 应该迭代列数。同样在将matrix[i+i][j] 设置为0 之前,您还应该检查i+1 &lt; matrix.length 是否(行数)

function matrixElementsSum(matrix) {
    let s = 0;
    for (var i = 0; i < matrix.length; i++) {
        for (var j = 0; j < matrix[0].length; j++) {
            if (matrix[i][j] == 0 && i+1 < matrix.length) {
                matrix[i+1][j] = 0;
            }
            s += matrix[i][j]
        }
    }
    return s
}

【讨论】:

    【解决方案2】:

    这是我对这个问题的解决方案。希望它会对某人有所帮助。

    function matrixElementsSum(matrix) {
        let susp = [];
        return matrix.reduce((t, arr, i)=>{
            return arr.reduce((tt, val, ii)=>{
                if (val === 0) susp.push(ii);
                if (susp.includes(ii)) {
                   return tt;
                } else {
                   return tt+val;
                } 
            }, 0) + t;
        }, 0); 
    }
    

    【讨论】:

      【解决方案3】:

      这是我使用 Python 的解决方案:

      def solution(matrix):
          row_len = len(matrix)
          col_len = len(matrix[0])
          sum = 0
          
          for c_index in range(col_len):
              for r_index in range(row_len):
                  if matrix[r_index][c_index] == 0:
                      break
                  else:
                      sum += matrix[r_index][c_index]
              
          return sum
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2018-09-15
        相关资源
        最近更新 更多