矩阵元素和

问题描述 投票:0回答:6

我想得到矩阵元素的总和,除了那些数字为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]]))
javascript matrix
6个回答
5
投票

您的循环计数器 i 应该迭代行数,j 应该迭代列数。另外,在将

matrix[i+i][j]
设置为 0 之前,您还应该检查是否
i+1 < 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
}

0
投票

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

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); 
}

0
投票

这是我使用 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

0
投票
function solution(matrix) {
let sum= 0;

for (let i = 0; i < matrix[0].length; i++) {
    for (let j = 0; j < matrix.length; j++) {
        if (matrix[j][i] === 0) break;
        sum+= matrix[j][i];
    }
}

return sum;
}

0
投票

function solution(matrix) {
  for(var r=0,j=0;j<matrix[0].length;j++){
      for(var i=0;i<matrix.length;i++){
        if(matrix[i][j]===0) break
        else r+=matrix[i][j]
      }
  }
  return r
}

我花了一些时间来解决这个练习。我发现这不是很复杂。


0
投票
function solution(matrix: number[][]): number {
let counter = 0
let s = matrix
for (let i = 0; i <= s.length-1; i++) {
 for (let j = 0; j <= s[i].length-1 ; j++) {
     if(i === 0 ){
         counter = counter + s[i][j]
     }
     else if ( s[i - 1][j] !== 0 && s[0][j] !== 0){
        counter = counter + s[i][j]
     }
}

}
return counter
}
© www.soinside.com 2019 - 2024. All rights reserved.