search
LoginSignup
0
Help us understand the problem. What are the problem?

posted at

118 解答

参考:
ArrayList, LinkedList の違い
Nick White

解答

public List<List<Integer>> generate(int numRows) {
		List<List<Integer>> ans = new ArrayList<>();
		
		if(numRows == 0) return ans;
		
		List<Integer> first_row = new ArrayList<>();
		first_row.add(1);
		ans.add(first_row);//最初の要素は絶対1だから
		
		for(int i = 1; i < numRows; i++) {
			List<Integer> prev_row = ans.get(i-1);
			List<Integer> current_row = new ArrayList<>();
			
			current_row.add(1);//rowごとに考えた場合、最初は1だから
			for(int j = 1; j < i; j++) {
				current_row.add(prev_row.get(j-1) + prev_row.get(j));
				
			}
			current_row.add(1);//最後の要素も常に1のため
			ans.add(current_row);
		}
		return ans;
		
	}

マイナスになる 不正解

愚直に計算すると

public List<List<Integer>> generate(int numRows) {
		List<List<Integer>> ans = new LinkedList<List<Integer>>();
		
		for (int row = 0; row < numRows; row++) {
			
			List<Integer> temp = new LinkedList<>();
			
			for (int col = 0; col < row + 1; col++) {
				System.out.println("row: "+ row+" col: "+ col);
				System.out.println(factorial(row) + "/" +factorial(row-col)*factorial(col));
				temp.add(col, Math.toIntExact(factorial(row)/(factorial(row-col)*factorial(col))));
				
			}
			ans.add(row,temp);
		}
		return ans;
	}

	public long factorial(int n) {
	    return LongStream.rangeClosed(1, n)
	        .reduce(1, (long x, long y) -> x * y);
	}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?