Leetcode 1085. Sum of Digits in the Minimum Number, Java解法

Given an array A of positive integers, let S be the sum of the digits of the minimal element of A.

Return 0 if S is odd, otherwise return 1.

Example 1:

 

Input: [99,77,33,66,55]
Output: 1
Explanation: 
The minimal element is 33, and the sum of those digits is S = 3 + 3 = 6 which is even, so the answer is 1.

 

Note:

  1. 1 <= A.length <= 100
  2. 1 <= A[i].length <= 100

Approach #1 Integer.toString() 我的解法

class Solution {
    public int sumOfDigits(int[] A) {
        int min = A[0];
        for(int i:A){
            if(i<min){
                min = i;
            }
        }

        String min_str = Integer.toString(min);
        int sum = 0;
        for(int i=0;i<min_str.length();i++){
            sum += (int)min_str.charAt(i);
        }
        if(sum%2==1)
            return 0;
        else
            return 1;
    }
}

分析

比较啰嗦,但是容易理解。

时间复杂度:O(n+n)

 

Approach #2 Array.stream().min().getAsInt()

  public int sumOfDigits(int[] A) {
        int min = Arrays.stream(A).min().getAsInt();
        int ans = 0;
        while (min > 0) {
            ans += min % 10;
            min /= 10;
        }
        return 1 - ans % 2;
   }

知识点:

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

构造stream的常用方法:

// 1. Individual values
Stream stream = Stream.of("a", "b", "c");
// 2. Arrays
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
// 3. Collections
List<String> list = Arrays.asList(strArray);
stream = list.stream();

除这里用到的min()之外,其他常用的method

Arrays.stream(arr).max();
Arrays.stream(arr).min();
Arrays.stream(arr).sum();
Arrays.stream(arr).average();
Arrays.stream(arr).count();
Arrays.stream(arr).distinct();
Arrays.stream(arr).findFirst();
  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值