Leetcode第2題、2数加算アルゴリズム--Java解法を最も理解しやすい
まず問題を見てみましょう.チェーン時計がよく分からないなら、この記事を見てもいいです.https://blog.csdn.net/weixin_44407699/article/details/97612030
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/add-two-numbers著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
まずこの問題を分析してみましょうは、計算のたびに次のノード にジャンプする.生成キャリー演算 の2つのチェーンテーブルの長さが異なります. をどのように処理すればいいですか.最高位加算がちょうど10に等しい場合、 はどのように処理しますか?
if()条件文で条件解決を設定できます
以下は私の解法で、参考にすることができて、ロジックは基本的にすべて比較的に簡単で、代価はコードの量が少し大きいです
みんなを助けることができることを望んで、みんなもそれぞれの解法を評論することを歓迎して、私達はいっしょに勉強します
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/add-two-numbers著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
まずこの問題を分析してみましょう
if()条件文で条件解決を設定できます
以下は私の解法で、参考にすることができて、ロジックは基本的にすべて比較的に簡単で、代価はコードの量が少し大きいです
public static ListNode add(ListNode l1, ListNode l2) {
ListNode result = new ListNode(0);//
ListNode l1flag = l1;// l1、l2 result , flag
ListNode l2flag = l2;
ListNode resultflag = new ListNode(0);
resultflag=result;
int num=0;//
while(l1flag!=null){//l1flag
if(l2flag==null){//l1flag ,l2flag
resultflag.val=l1flag.val+num;
num=0;
if(resultflag.val>=10){
num=1;
resultflag.val-=10;
}
l1flag=l1flag.next;//flag
if(l1flag!=null||num!=0)
resultflag.next=new ListNode(0);
resultflag=resultflag.next;
}
if(l2flag!=null){//
resultflag.val=l1flag.val+l2flag.val+num;
if(resultflag.val>=10){
num=1;
resultflag.val-=10;
}else{
num=0;
}
l1flag=l1flag.next;
l2flag=l2flag.next;
if(l2flag!=null||l1flag!=null||num!=0)
resultflag.next=new ListNode(0);
resultflag=resultflag.next;
}
}
while(l2flag!=null){//l1flag l2flag
resultflag.val=l2flag.val+num;
num=0;
if(resultflag.val>=10){
num=1;
resultflag.val-=10;
}
l2flag=l2flag.next;
if(l2flag!=null||num!=0)
resultflag.next=new ListNode(0);
resultflag=resultflag.next;
}
if(l1flag==null&&l2flag==null&&num!=0){// 10
resultflag.val=num;
num=0;
}
return result;
}
みんなを助けることができることを望んで、みんなもそれぞれの解法を評論することを歓迎して、私達はいっしょに勉強します