LeetCode面接問題64、1+2+...+nを求めます
1055 ワード
LeetCode面接問題64、1+2+...+nを求めます
テーマ:1+2+…+nを求めて、乗除法、for、while、if、else、switch、caseなどのキーワードと条件の判断文(A?B:C)を使うことができないことを要求します.
タイトルリンク:https://leetcode-cn.com/problems/qiu-12n-lcof/
方法一、再帰
問題を手に入れた後、私はまず再帰を考えたが、再帰過程の中断条件をどのように処理するか、if()、else()を使用できない場合、論理式**&&演算子**を採用するかという問題があった.
&&演算子:&&演算子左の結果と右の結果が同時に真である場合、結果真&&演算子左の結果と右の結果が同時に偽である場合、結果が偽&&&演算子左の結果と右の結果が偽である場合、結果が偽&&&&&&演算の順序は:左から右
メソッド2、シフト、べき乗演算
等差数列の前n相和を得る:Sn=n(n+1)/2シフト演算子:<:左シフト演算子、num<<1、numに2を乗じたものに相当し、0を加算する.>:右シフト演算子、num>>1は、numを2で割ったものに相当し、0を塗ります.乗方演算子:a**nはaのn次方に相当します.優先度は*より1つ高いです.
従ってSn=n(n+1)/2=(n**2+n)>>1
まとめ:
ifを使用しない場合は、論理演算子を使用して再帰を実現できます.
テーマ:1+2+…+nを求めて、乗除法、for、while、if、else、switch、caseなどのキーワードと条件の判断文(A?B:C)を使うことができないことを要求します.
タイトルリンク:https://leetcode-cn.com/problems/qiu-12n-lcof/
方法一、再帰
問題を手に入れた後、私はまず再帰を考えたが、再帰過程の中断条件をどのように処理するか、if()、else()を使用できない場合、論理式**&&演算子**を採用するかという問題があった.
&&演算子:&&演算子左の結果と右の結果が同時に真である場合、結果真&&演算子左の結果と右の結果が同時に偽である場合、結果が偽&&&演算子左の結果と右の結果が偽である場合、結果が偽&&&&&&演算の順序は:左から右
class Solution {
public int sumNums(int n) {
int sum=n;
boolean a= n>1 && (sum +=sumNums(n-1))>0;
return sum;
}}
メソッド2、シフト、べき乗演算
等差数列の前n相和を得る:Sn=n(n+1)/2シフト演算子:<:左シフト演算子、num<<1、numに2を乗じたものに相当し、0を加算する.>:右シフト演算子、num>>1は、numを2で割ったものに相当し、0を塗ります.乗方演算子:a**nはaのn次方に相当します.優先度は*より1つ高いです.
従ってSn=n(n+1)/2=(n**2+n)>>1
// python
class Solution(object):
def sumNums(self, n):
return ((n**2+n)>>1)
まとめ:
ifを使用しない場合は、論理演算子を使用して再帰を実現できます.