【LeetCode】Plus One 【九度】题目1198:a+b

2024-08-25 12:32

本文主要是介绍【LeetCode】Plus One 【九度】题目1198:a+b,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Plus One 
Total Accepted: 4206 Total Submissions: 14127 My Submissions
Given a number represented as an array of digits, plus one to the number.
题目意思为给定一个数组,这个数组内的数代表某个大数,也就是可能为100位甚至多少位的一个数。
例如123456789012345678901234567890000,那么digits的每个位必然为一个个位数。
两个大数相加,可以使用数组,按位累加。
大于10就进位,同时将当前位-1,并且上一位加1。
Java AC

public class Solution {public int[] plusOne(int[] digits) {int len = digits.length;int addNum[] = new int[len + 1];addNum[len] = 1;for (int i = len - 1; i >= 0; i--) {addNum[i + 1] += digits[i];if (addNum[i + 1] >= 10) {addNum[i + 1] -= 10;addNum[i] += 1;}}if (addNum[0] ==  0) {System.arraycopy(addNum, 1, digits, 0, len);return digits;}else {return addNum;}}
}

LeetCode Add Binary 也是大数相加,只不过这次是二进制,知道进制相加的原则即可。
Java AC

public class Solution {public String addBinary(String a, String b) {if(a == null || b == null){return "";}if("".equals(a) || "".equals(b)){return "";}if("".equals(a.replaceAll("0", "")) && "".equals(b.replaceAll("0", ""))){return "0";}int len1 = a.length();int len2 = b.length();char arrayA[] = a.toCharArray();char arrayB[] = b.toCharArray();int maxLen = Math.max(len1,len2);int minLen = Math.min(len1,len2);int array[] = new int[maxLen+1];int k = maxLen;if(maxLen == len1){for(int i = minLen-1; i >= 0; i--){array[k] += arrayA[k-1] - '0' + arrayB[i] - '0';if(array[k] >= 2){array[k] -= 2;array[k-1] += 1;}k--;}while(k > 0){array[k] += arrayA[k-1] - '0';if(array[k] >= 2){array[k] -= 2;array[k-1] += 1;}k--;}}else{for(int i = minLen-1; i >= 0; i--){array[k] += arrayA[i] - '0' + arrayB[k-1] - '0';if(array[k] >= 2){array[k] -= 2;array[k-1] += 1;}k--;}while(k > 0){array[k] += arrayB[k-1] - '0';if(array[k] >= 2){array[k] -= 2;array[k-1] += 1;}k--;}}StringBuffer sb = new StringBuffer();int i = 0;if(array[0] == 0){i = 1;}for(; i < maxLen+1; i++){sb.append(array[i]);}return sb.toString();}
}

九度题目1198:a+b 2010年华中科技大学计算机研究生机试真题是一类题。
当时用了三种解法去解决。
一并给代码。
方法1 Java AC

import java.math.BigDecimal;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){String a = scanner.next();String b = scanner.next(); BigDecimal ad = new BigDecimal(a);BigDecimal bd = new BigDecimal(b);BigDecimal c = ad.add(bd);System.out.println(c);}}
}
/**************************************************************Problem: 1198User: wzqwsrfLanguage: JavaResult: AcceptedTime:980 msMemory:84752 kb
****************************************************************/

方法2 Java AC

import java.util.Scanner;
public class Main {/** 1198*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){             String a = scanner.next();String b = scanner.next(); int alength = a.length();int blength = b.length();int minlength = Math.min(alength, blength);int maxlength = Math.max(alength, blength);int in = 0 ;String result = "";String maxStr = alength>blength?a:b;String minStr = alength<blength?a:b;int c = maxlength-minlength;for (int i = minlength -1; i >= 0; i--) {int sa = minStr.charAt(i)-'0';int sb = maxStr.charAt(c + i)-'0';int count = sa+sb+in;if(count >= 10){in = 1;result = count-10+result;}else{in = 0 ;result = count + result;}                 }             for (int i = c-1 ; i >= 0 ; i--) {int max = maxStr.charAt(i)-'0';int count = max+in;if(count>=10){in = 1;result = count-10+result;}else{in = 0 ;result = count + result;}}if(in==1){result = in +result ;}System.out.println(result);}}
}
/**************************************************************Problem: 1198User: wzqwsrfLanguage: JavaResult: AcceptedTime:1120 msMemory:210296 kb
****************************************************************/

方法3 Java AC

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){String a = scanner.next();String b = scanner.next();int aLength = a.length();int bLength = b.length();int max = Math.max(aLength, bLength);int[] arrayA = new int[max+1];int[] arrayB = new int[max+1];int k = 0;for (int i = max+1-aLength ; i< max+1; i++ ) {arrayA[i] = a.charAt(k)-'0';k++;}k = 0;for (int i = max+1-bLength ; i< max+1; i++ ) {arrayB[i] = b.charAt(k)-'0';k++;}int[] arrayC = new int[max+1];for (int i = max ; i> 0 ;i--) {arrayC[i] += arrayA[i] + arrayB[i];if (arrayC[i]>=10) {arrayC[i] -= 10;arrayC[i-1] += 1;}}if (arrayC[0] == 0) {for (int i = 1; i < arrayC.length; i++) {System.out.print(arrayC[i]);}System.out.println();}else {for (int i = 0; i < arrayC.length; i++) {System.out.print(arrayC[i]);}System.out.println();}}}
}
/**************************************************************Problem: 1198User: wzqwsrfLanguage: JavaResult: AcceptedTime:2290 msMemory:95360 kb
****************************************************************/

这篇关于【LeetCode】Plus One 【九度】题目1198:a+b的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105553

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

POJ 1198 双广+Hash

此题采用双广可从bfs的O(16^8)降低到O(2*16^4); 坐标0-7,刚好3位存储, 需要24位存储四个坐标(x,y),也就是[0,2^24) 。 很好的一题。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return