本文主要是介绍力扣1513-仅含 1 的子串数-No.2-2021,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
class Solution {public int numSub(String s) {String[] sub=s.split("0");long total=0;long a=0;for(int i=0;i<sub.length;i++){a=(long)sub[i].length();total=total+a*(a+1)/2;}return (int)(total%(1000000000+7));}
}
上面是我看了论坛搞出来的最优解。还是远不如python,python如下
class Solution(object):def numSub(self, s):ones = s.split('0');res = 0for i in ones:res += len(i) * (len(i)+1) / 2return res % (10**9 + 7)
因为java有类型,而python无类型,所以在java需要很多显式的类型转换,特别烦躁。关键是长度函数还不一样。
String 是length(),数组是length,list是size(),这些细节都是会浪费分钟级别的时间。
次方人家python**结束,java要敲这么多个0,增加错误概率。
这是第一次我自己的答案,非常冗余,这个答案是不对的,关键是要把total和n的类型都改成long,不然在计算n*(n+1)/2的时候已经发生越界了。
int total=0;int n=0;for(int i=0;i<s.length();i++){System.out.print("i="+i);//if(s.charAt(i)=='1'){n=n+1;System.out.print(",n="+n);if(i==(s.length()-1)){total=total+n*(n+1)/2;System.out.println(",total="+total);return total;}}else{total=total+n*(n+1)/2;n=0;System.out.println(",total="+total); }}return total;
这篇关于力扣1513-仅含 1 的子串数-No.2-2021的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!